2012-03-30
80-97/913
Java编程思想第四版——第九天
3.9 直接常量
一般来说,使用直接常量,编译器可以准确的知道要生成什么样的类型,但有时候却是模凌两可的,这种时候必须对编译器加以适当的指导,用与直接量相关的某些字符来额外增加一些信息。
直接常量后面的后缀字符标志了它的类型:大写(或小写)的L,代表long(使用小写字母l容易造成混淆,因为它看起来很像数字1),大写(或小写)字母F,代表float,大写(或小写)字母D,则代表double。
十六进制数适用于所有整数数据类型,以前缀0x(或0X),后面跟随0-9或小写(或大写)的a-f来表示。
将一个变量初始化超出自身表示范围的值(无论这个值得数值形式如何),编译器都会报告一条错误信息。超出范围,会进行窄化转型。
八进制数由前缀0以及后续的0~7的数字来表示。
在C、C++或者java中,二进制数没有直接常量表示方法,但是,在使用十六进制和八进制记数法时,以二进制形式显示结果将非常有用。通过使用Integer和Long类的静态方法toBinaryString()可以很容易地实现这一点。如果将比较小的类型传递给Integer. toBinaryString()方法,则该类型将自动被转换为int。
3.9.1 指数记数法
在科学与工程领域,“e”代表自然对数的基数,约等于2.718(java中的Math.E给出了更精确的double型的值)。
C、C++以及java都用e代表“10的幂次”。
3.10 按位操作符
按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位。Java的设计初衷是嵌入式电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。不会过多地用到位操作符。
按位操作符和逻辑操作符都使用了同样的符号:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。由于位是非常小的,所以按位操作符仅使用了一个字符。按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=、|=、^=(~是一元操作符,不可与=联合使用)。
布尔类型作为一种单比特值,有些独特。可以对它执行按位“与”、按位“或”和按位“异或”运算,但不能执行按位“非”(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是它们不会中途短路。针对布尔值进行的按位运算新增了一个“异或”逻辑操作符,没有包括在“逻辑”操作符列表中,移位表达式中,不能使用布尔运算。
3.11 移位操作符
移位操作符操作的运算对象也是二进制的“位”,只可用来处理整数类型。
按位和移位操作符都不是很理解,后面需要着重了解下。
3.12 三元操作符if-else
三元操作符也称为条件操作符,有三个操作数,属于操作符的一种,最终也会生成一个值,与普通if-else语句是不同的。
boolean-exp ? value0 : value1
如果boolean-exp结果位true,计算value0,计算结果为最终值,如果false,计算value1,结果为最终值。也可以用普通if-else,但这样更简洁。C发明了该操作符,此操作符的引入多半就是为了这种高效率的编程。如果打算频繁使用它,需要多作思量,它很容易产生可读性极差的代码。
3.13 字符串操作符+和+=
Java中的特殊用途:链接不同的字符串。
C++中引入操作符重载(operator overloading)机制,以便C++程序员可以为几乎所有操作符增加功能。但与C++的另外一些限制结合在一起,使得操作符重载成为了一种非常复杂的特性。Java中更易实现,但java程序员不能像C++和C#程序员那样实现自己的重载操作符。
表达式以一个字符串起头,后续所有操作数都必须是字符串型(编译器会把双引号内的字符序列自动转换成字符串)。
最先计算括号内
一个空的String后面跟随+和一个基本类型变量,转换成String。
3.14 使用操作符时常犯的错误
对表达式如何计算有点不确定,也不愿意使用括号。
Java中不会把int转换成布尔值
Java不允许随便把一种类型当作另一种类型来用。
3.15 类型转换操作符
类型转换(cast)的原意是“模型铸造”。在适当的时候,java会将一种数据类型自动转换成另一种。
窄化转换(narrowing conversion):将容纳更多信息的数据类型转换成无法容纳那么多信息的类型,有可能面临信息丢失的危险。编译器会强制进行类型转换。
扩展转换(widening conversion):不必显示地进行类型转换,新类型肯定能容纳原来类型的信息不会造成任何信息的丢失。
Java允许把任何基本数据类型转换成别的基本数据类型,布尔类型除外,后者根本不允许进行任何类型的转换处理。“类”数据类型不允许进行类型转换,将一种类型转换成另一种,必须采用特殊的方法(后面会讲到,对象可以在其所属类型的类族之间进行类型转换)。
3.15.1 截尾和舍入
执行窄化转换时,必须注意截尾与舍入问题。
float或double转型为整数值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
round()是java.lang的一部分,使用时不需要额外地导入。
3.15.2 提升
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
3.16 Java没有sizeof
C和C++中,sizeof()操作符可以知道数据项分配的字节数,使用的最大原因是为了“移植”。移植是令C和C++程序员颇为头痛的一个问题。
Java不需要sizeof(),因为所有数据类型在所有机器中的大小都是相同的,不必考虑移植的问题,已经被设计在语言中了。
3.17 操作符小结
能够对布尔型值进行的运算非常有限,只能赋予它true和false值,测试它为真还是假,不能将布尔值相加,或对布尔值进行其他任何运算。
如果对两个足够大的int值执行乘法运算,结果可能会溢出,但编译器不会报错或警告,运行时也不会出现异常,这说明java虽好,但也没有想象中那么好。
对于char、byte或者short,复合赋值并不需要类型转换。尽管它们执行类型提升,但也会获得与直接算术运算相同的结果,某些时候省略类型转换可使代码更加简练。
除了boolean以外,任何一种基本类型都可通过类型转换变为其他基本类型,当类型转换成一种较小的类型时,必须留意“窄化转换”的结果,否则会在类型转化过程中不知不觉地丢失了信息。
3.18 总结
Java中的操作符与C相似。
80-97/913
Java编程思想第四版——第九天
3.9 直接常量
一般来说,使用直接常量,编译器可以准确的知道要生成什么样的类型,但有时候却是模凌两可的,这种时候必须对编译器加以适当的指导,用与直接量相关的某些字符来额外增加一些信息。
直接常量后面的后缀字符标志了它的类型:大写(或小写)的L,代表long(使用小写字母l容易造成混淆,因为它看起来很像数字1),大写(或小写)字母F,代表float,大写(或小写)字母D,则代表double。
十六进制数适用于所有整数数据类型,以前缀0x(或0X),后面跟随0-9或小写(或大写)的a-f来表示。
将一个变量初始化超出自身表示范围的值(无论这个值得数值形式如何),编译器都会报告一条错误信息。超出范围,会进行窄化转型。
八进制数由前缀0以及后续的0~7的数字来表示。
在C、C++或者java中,二进制数没有直接常量表示方法,但是,在使用十六进制和八进制记数法时,以二进制形式显示结果将非常有用。通过使用Integer和Long类的静态方法toBinaryString()可以很容易地实现这一点。如果将比较小的类型传递给Integer. toBinaryString()方法,则该类型将自动被转换为int。
3.9.1 指数记数法
在科学与工程领域,“e”代表自然对数的基数,约等于2.718(java中的Math.E给出了更精确的double型的值)。
C、C++以及java都用e代表“10的幂次”。
3.10 按位操作符
按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位。Java的设计初衷是嵌入式电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。不会过多地用到位操作符。
按位操作符和逻辑操作符都使用了同样的符号:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。由于位是非常小的,所以按位操作符仅使用了一个字符。按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=、|=、^=(~是一元操作符,不可与=联合使用)。
布尔类型作为一种单比特值,有些独特。可以对它执行按位“与”、按位“或”和按位“异或”运算,但不能执行按位“非”(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是它们不会中途短路。针对布尔值进行的按位运算新增了一个“异或”逻辑操作符,没有包括在“逻辑”操作符列表中,移位表达式中,不能使用布尔运算。
3.11 移位操作符
移位操作符操作的运算对象也是二进制的“位”,只可用来处理整数类型。
按位和移位操作符都不是很理解,后面需要着重了解下。
3.12 三元操作符if-else
三元操作符也称为条件操作符,有三个操作数,属于操作符的一种,最终也会生成一个值,与普通if-else语句是不同的。
boolean-exp ? value0 : value1
如果boolean-exp结果位true,计算value0,计算结果为最终值,如果false,计算value1,结果为最终值。也可以用普通if-else,但这样更简洁。C发明了该操作符,此操作符的引入多半就是为了这种高效率的编程。如果打算频繁使用它,需要多作思量,它很容易产生可读性极差的代码。
3.13 字符串操作符+和+=
Java中的特殊用途:链接不同的字符串。
C++中引入操作符重载(operator overloading)机制,以便C++程序员可以为几乎所有操作符增加功能。但与C++的另外一些限制结合在一起,使得操作符重载成为了一种非常复杂的特性。Java中更易实现,但java程序员不能像C++和C#程序员那样实现自己的重载操作符。
表达式以一个字符串起头,后续所有操作数都必须是字符串型(编译器会把双引号内的字符序列自动转换成字符串)。
最先计算括号内
一个空的String后面跟随+和一个基本类型变量,转换成String。
3.14 使用操作符时常犯的错误
对表达式如何计算有点不确定,也不愿意使用括号。
Java中不会把int转换成布尔值
Java不允许随便把一种类型当作另一种类型来用。
3.15 类型转换操作符
类型转换(cast)的原意是“模型铸造”。在适当的时候,java会将一种数据类型自动转换成另一种。
窄化转换(narrowing conversion):将容纳更多信息的数据类型转换成无法容纳那么多信息的类型,有可能面临信息丢失的危险。编译器会强制进行类型转换。
扩展转换(widening conversion):不必显示地进行类型转换,新类型肯定能容纳原来类型的信息不会造成任何信息的丢失。
Java允许把任何基本数据类型转换成别的基本数据类型,布尔类型除外,后者根本不允许进行任何类型的转换处理。“类”数据类型不允许进行类型转换,将一种类型转换成另一种,必须采用特殊的方法(后面会讲到,对象可以在其所属类型的类族之间进行类型转换)。
3.15.1 截尾和舍入
执行窄化转换时,必须注意截尾与舍入问题。
float或double转型为整数值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
round()是java.lang的一部分,使用时不需要额外地导入。
3.15.2 提升
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
3.16 Java没有sizeof
C和C++中,sizeof()操作符可以知道数据项分配的字节数,使用的最大原因是为了“移植”。移植是令C和C++程序员颇为头痛的一个问题。
Java不需要sizeof(),因为所有数据类型在所有机器中的大小都是相同的,不必考虑移植的问题,已经被设计在语言中了。
3.17 操作符小结
能够对布尔型值进行的运算非常有限,只能赋予它true和false值,测试它为真还是假,不能将布尔值相加,或对布尔值进行其他任何运算。
如果对两个足够大的int值执行乘法运算,结果可能会溢出,但编译器不会报错或警告,运行时也不会出现异常,这说明java虽好,但也没有想象中那么好。
对于char、byte或者short,复合赋值并不需要类型转换。尽管它们执行类型提升,但也会获得与直接算术运算相同的结果,某些时候省略类型转换可使代码更加简练。
除了boolean以外,任何一种基本类型都可通过类型转换变为其他基本类型,当类型转换成一种较小的类型时,必须留意“窄化转换”的结果,否则会在类型转化过程中不知不觉地丢失了信息。
3.18 总结
Java中的操作符与C相似。
发表评论
-
Java编程思想第四版——第二十一天
2012-05-04 12:56 5452012-05-04 163-170/913 Java编 ... -
Java编程思想第四版——第二十天
2012-05-03 13:45 6542012-05-03 158-163/913 Java编程思 ... -
Java编程思想第四版——第十九天
2012-05-02 11:08 7782012-05-02 149-158/913 Java编程思 ... -
Java编程思想第四版——第十八天
2012-04-27 13:12 9662012-04-27 142-149/913 Java编 ... -
Java编程思想第四版——第十七天
2012-04-25 11:18 7142012-04-25 138-142/913 Java编程思 ... -
Java编程思想第四版——第十六天
2012-04-24 13:50 7142012-04-24 131-138/913 Java编 ... -
Java编程思想第四版——第十五天
2012-04-23 17:14 7202012-04-23 121-131/913 Java编程思 ... -
Java编程思想第四版——第十四天
2012-04-19 11:28 5942012-04-19 118-121/913 Java编程思 ... -
Java编程思想第四版——第十三天
2012-04-18 12:08 6402012-04-18 108-118/913 Java编 ... -
Java编程思想第四版——第十二天
2012-04-09 10:58 6952012-04-09 102-108/913 Java编 ... -
Java编程思想第四版——第十一天
2012-04-05 12:21 7832012-04-05 Java编程思想第四版——第十一天 ... -
Java编程思想第四版——第十天
2012-03-31 12:03 5302012-03-31 97-102/913 Java编程思想 ... -
Java编程思想第四版——第八天
2012-03-29 12:09 4552012-03-29 76-80/913 3.6 自动递增和 ... -
Java编程思想第四版——第七天
2012-03-28 12:24 6312012-03-28 70-76/913 昨天找 ... -
Java编程思想第四版——第六天
2012-03-27 13:02 5002012-03-27 66-70/913 最近两 ... -
Java编程思想第四版——第五天
2012-03-23 15:09 9182012-03-23 60-66/913 2.5 方法、参数 ... -
Java编程思想第四版——第四天
2012-03-22 12:41 5582012-03-22 54-60/913 第二章 ... -
Java编程思想第四版——第三天
2012-03-21 12:40 5402012-03-21 47-54/913 1.12 并 ... -
Java编程思想第四版——第二天
2012-03-20 13:54 711今天本来以为进度可以 ... -
Java编程思想第四版——第一天
2012-03-19 15:57 752Java已经丢手一年了 ...
相关推荐
Java编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZF
基于java编程思想(Thinking in java, TIJ)的教学课件,教学设计请见http://blog.csdn.net/Florianjin
我制作的java编程思想的教学课件,紧跟着“java编程思想教学材料——开端”
很有名的一本书—————Java编程思想【第4版】习题答案
实训项目八:JAVA网络编程(csdn)————程序
基于java编程思想(Thinking in java, TIJ)的教学PPT,教学设计请见http://blog.csdn.net/Florianjin
Java之SSH深入浅出——精简剖析
java8函数式编程(csdn)————程序
Java 基本语法(四)——字串和数组 Java 基本语法(四)——字串和数组
java 面向对象编程(csdn)————程序
非常全面的java教程,包含了java的基础技术,还有数据库,网络,GUI方面的知识,非常好的一个教程
计算机软件开发的Java编程语言及应用——评《Java编程方法论》.pdf
做坦克游戏,学Java编程(四)——添加炮弹类.pdf
——————————————————————————————————————————————
利用Java进行疫情大数据分析——“Java面向对象程序设计”课程实践教学设计研究.pdf
《Java 工程师的编程逻辑》——用 java 看计算机世界。