Java的操作符看似凌乱,大致分为四类。
算术操作符
- 算术操作符
- 逻辑相关的
- 位相关的
- 类型转换操作符
包括+,-,*,/,%。
-
字符串操作符
加减运算可值得讨论的不多。唯一需要注意的是当+的操作数中出现了字符串时,+就会具有字符串拼接的功能,这类似于c++的操作符重载机制,即一个操作符具有两种功能。它具有以下几个性质:当一个+的其中一个操作数是字符串时,就会把+的左右两个操作数都看成字符串,并把两个字符串拼接成一个字符串。若是连续的+表达式,则从那个具有字符串操作数的+操作符开始,后面所有的操作数都会被看作字符串。(记得给栗子)
-
整数乘法和除法
与乘法除法相关操作符是*,/,%。整数乘法值得说的不多,重点是整数除法。
/的作用是得到除法商(只保留商的整数部分),%的作用是返回除法运算的余数。要注意的是0不允许作为除数。 -
乘法和除法数系的扩充
*,/,%也支持负数和浮点运算。支持负数意味着除数,被除数和商都可以是负数。当这三个操作符的其中一个或两个操作数是浮点类型时,这个表达式就允许浮点运算了。(给例子)
这些操作符有一个共同的特性:返回值是布尔类型。
关系操作符(==,!=,>,<,>=,<=)
- 操作数:==适用于所有数据类型,其他的关系操作符适用于除boolean外的所有基本数据类型。
- 返回值:,根据表达式的真假,返回对应的boolean值
(&&,||,!)
- 操作数:boolean
当操作符左右都是true时,返回true,否则返回false。
逻辑或||当操作符左右至少有一个true时,返回true,只有两边都是false时,才返回false。
逻辑非!当操作符是true时,返回false。当操作符是false,返回true。
短路求值:当逻辑与&&和逻辑或||表达式的结果已经确定时,剩余的操作数将不会继续运算,目的是提高运算效率。
三元操作符- 语法: boolean表达式?表达式1?表达式2;
- 返回值:当boolean表达式为true,返回表达式1,否则返回表达式2
与分支语句if-else的比较: - 优点:代码精简。
- 缺点:频繁使用可能会影响代码可读性。
- 特点:对操作数的单个二进制位进行操作
(&,|,^,~)
- 操作数:除~不可对boolean进行操作外,均可对整数和boolean进行操作
- 返回值:
操作数为boolean时:结果等同于不会短路求值的关系运算符
操作数为整数时:对操作数的每个二进制为进行操作。
只有两个操作数的对应的二进制位都是1,返回值的对应二进制才为1,否则为0。
按位或|:对应的二进制至少有一个1,结果就为1。
按位异或^:只有对应的二进制不同时,结果为1,相同则为0。
按位取反~:一元操作符。若操作数的对应二进制为1,则返回值的对应二进制位为0;反之,若操作数为1,则返回值为0;
移位操作符(<<,>>,>>>)
- 操作数类型:整数
- 语法:操作数 移位操作符 要移位操作的次数(不小于0的整数);
- 返回值:
<<左移:最高位去除,最低位补0
>>右移:最低位去除,最高位补符号位
>>>无符号右移:最低位去除,最高位补0
- 语法:(数据类型)变量;
- 作用:指定某个变量的类型。
类型转换的发生时机:在变量使用操作符进行运算前。
扩展转换(隐式转换)又分为整形提升和算术转换,因为其会自行发生,因此也称为隐式转换。
- 整形提升:当变量的字节小于四个字节时,会提升为四个字节再进行运算。
- 算术转换:当二元操作符的某个操作数大于4个字节,另一个操作数的大小小于四个字节,或者一个操作数是整数,一个操作数是浮点数据时。相对小的操作数会进行算术提升,把自己的类型转换为另一个的类型。
1boolean不能和其他基础数据类型相互转换。
2当整数和浮点数运算前,整数会提升为浮点数。
3扩展转换发生在运算前而不是运算后。
大转小 必须使用强制操作符,否则会编译错误



