3.1 更简单的打印语句
3.2 使用Java操作符
3.3 优先级
3.4 赋值
左值必须是一个明确的、已命名的变量。
右值可以是任何常数、变量或者表达式。
为对象进行赋值时,实际是把引用的值传给另一个引用。使得两个引用都指向同一个对象。所以对对象赋值要非常谨慎。
Java中的“==”对于基本类型是比较其数值是否相等,而对于引用永远都是比较其所指向的对象地址是否相同。
3.4.1 方法调用中的别名问题
方法传递的对象参数实际是一个引用。方法对参数所指的对象进行修改,实际就修改了方法外的那个对象。
3.5 算术操作符
在创建Random对象时提供的随机数种子,用于随机数生成器的初始化值,随机数生成器对于特定的种子值总是产生相同的随机数序列。
如果在创建时未设置随机数种子,则默认将当前时间作为随机数生成器的种子。
Random类的nextInt(n)会获取的随机数取值范围为0——n-1。
3.5.1 一元加、减操作符
一元减号是对数字取反,一元加号是较小类型的操作数提升为int。两个的优先级都比四则运算的高。
3.6 自动递增和递减
3.7 关系操作符
3.7.1 测试对象的等价性
不可以使用==,!=来直接比较对象,此时实际比较的是对象引用的值,而要做对象比较,就必须使用equals()
基本类型不适用于以上规则。
对于自己创建的类,如果未进行equals()的覆盖,则默认比较引用值,与使用==效果相同,而不是做对象比较。
3.8 逻辑操作符
与或非在Java中只可比较布尔值
3.8.1 短路
与C,C++中相同。
3.9 直接常量
对byte,short,int,char都可以使用Integer.toBinaryString(),将变量值转换为其对应的二进制数字。注意此时的类型将自动转换为int
对long则使用Long.toBinaryString(),将变量值转换为其对应的二进制数字。
3.9.1 指数记数法
1.39E-43f代表的是1.39*10的-43次方。
3.10 按位操作符
&,|,^,~
可以使用布尔类型进行按位“与”,“或”,“异或”,不可以进行按位“非”。
3.11 移位操作符
只可用来处理整数类型。左移位操作符:<<,右移位>>
Java中多了一个>>>无符号右移位操作符,无论正负高位补0
可以与=连接使用。
3.12 三元操作符if-else
表达式?值1:值2 会有返回值值1或值2。
3.13 字符串操作符+和+=
Java不可以自己重载操作符。
如果表达式以字符串起头,除非有括号,则后面所有操作数圈转换为字符串型,+变为连接作用。但如果先是整形,则+还是相加。
3.15 类型转换操作符
对于大类型向小类型转换,就必须用显示的强制转换。
布尔型不能转换,类只能在自己的继承树上转换。
3.15.1 截尾和舍入
将浮点型转换为整型值,总是进行截尾,若要进行舍入,就必须要使用Math.round()方法。
3.15.2 提升
如果对基本数据类型进行算术运算或位运算,只要比int小,那么在运算之前就会自动转换成int。要赋值给原来类型的变量,就必须进行强制类型转换。注意此时可能会丢失信息。
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
3.16 Java中没有sizeof
3.17 操作符小结
小心int类型的溢出不会报错。
除了boolean类型之外,任何一种基本类型都可通过类型转换变为其他基本类型。