第3章 操作符

1. 使用Java操作符

几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”、“==” 和 “!=”,这些操作符能操作所有的所有的对象。除此以外,String类支持“+”和“+=”

2. 优先级 (需要去括号去明确规定计算顺序)

3. 赋值

赋值使用操作符“=”。对基本数据类型的赋值是很简单的。基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容赋值到了另外一个地方。

但是在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是对对象的引用。所以倘若“将一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到另一个地方。这意味着假若对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。

4. 算术操作符

加号(+)、减号(-)、除号(/)、乘号(*)以及取模操作符(%,它从整数除法中产生余数)

5. 自增和自减

前缀递增++a,前缀递减--a,先执行运算,再生成值
后缀递增a++,后缀递减a--,先生成值,再执行运算

6. 关系操作符

关系操作符生成的是一个boolean布尔型的结果
对象的等价性:比较两个对象是否相等时,==和=!比较的是两个对象的引用是否相同。可以用equals进行两个对象的比较,equals默认的也是比较引用,可以通过在类中覆盖equals方法,自定义如何比较相等。

7. 逻辑操作符

与(&&), 或(||),非(!)
短路:使用逻辑操作符时,一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分了。因此整个逻辑表达式靠后的部分有可能不会被运算(可以利用这个特性来实现 if 选择判断的功能)

8. 直接常量

直接常量后面的后缀字符标志了它的类型。
若为大写(或小写)的L,代表long。
若为大写(或小写)的F,代表float。
若为大写(或小写)的D,代表double。
十六进制以前缀0x(或0X),后面跟随0-9或a-f(A-F)来表示
八进制数由前缀0以及后续的0-7的数字来表示
二进制在Java中可以通过Integer或Long类的静态方法toBinaryString()来实现
指数计数:类似1.39e-43f这样的计数

9. 按位操作符

按位操作符用来操作整数基本数据类型中的单个bit,即二进制位。
按位与(&),按位或(|),按位非(~),按位异或(^)
我们将布尔类型(boolean)作为一种单比特值对待。可以对它执行按位与,按位或,或者按位异或运算,但是不能执行按位非(大概是为了避免与逻辑非混淆)

10. 移位操作符

左移(>), 无符号右移(>>>)

11. 三元操作符

12. 类型转换操作符

在Java中,类型转换则是一种比较安全的操作。然而,如果要执行一种名为窄化转换的操作,就可能面临信息丢失的风险。
Javva语序把任何基本数据类型转换为别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理。