「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」
这次再来复习一些Java的关于运算符的知识,主要包括结合赋值和运算符、自增与自减运算符、关系和 boolean 运算符等知识。
1.结合赋值和运算符
可以在赋值中使用二元运算符,这是一种很方便的简写形式。
例如,x += 4;
等价于: x = x + 4;
(一般地,要把运算符放在 = 号左边,如 *= 或 %=)。另外还需要注意的是,如果通过结合复制运算符得到的结果,其类型与左侧操作数的类型不同,就会发生强制类型转换。比如说,如果 x 是int类型, 通过赋值语句 x += 3.8;
得到的结果是等同于将把 x 设置为x =(int)(x + 3.5);
。
2.自增与自减运算符
自增自减操作比较常见,不管是在C还是在C++,都有自增自减才做。Java就借鉴了C和C++的做法,也提供了自增、自减运算符。例如n++;
将变量n的当前值加1, n--;
则将n的值减1。例如,以下代码:int n = 12; n++;
将n的值改为13。由于这些运算符会改变变量的值,所以它们的操作数不能是数值。例如, 4++ 就不是一个合法的语句。实际上,这些运算符有两种形式;上面介绍的是运算符放在操作数后面的“后缀”形式。还有一种“前缀”形式:++n。后缀和前缀形式都会使变量值加 1 或减 1。但用在表达式中时,二者就有区别了。前缀形式会先完成加 1; 而后缀形式会使用变量原来的值。
int m = 7;
int n = 7;
int a = 2 * ++m; // 此时m先加1变为8,再乘2,a就是16
int b = 2 * n++; // 此时n参与运算时是7,b为14,最后n加1变为8
//建议不要在表达式中使用 ++, 因为这样的代码很容易让人闲惑,而且会带来烦人的 bug
3.关系和 boolean 运算符
Java的关系运算符也比较丰富。要比较两个变量是否相等,再某些情况下,可以使用两个等号==。例如,3 == 7;
的值为 false。另外可以使用!= 检测不相等。例如,3!=7;
的值为true。最后,还有经常使用的 < (小于)、 > (大于) 、<=(小于等于)和 >= (大于等于)这些关系运算符。 Java 沿用了 C++ 的做法,使用&&表示逻辑“与”运算符,使用||表示逻辑“或” 运算符。从!=运算符可以看出,感叹号就是逻辑非运算符。&&和||运算符是按照“短路”方式来求值的:简单来说,就是第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了(这个细节得注意,特别是涉及到最变量的操作)。例如&&运算符合并两个表达式expression1 && expression2,如果已经计算得到expression1的真值为false, 那么结果就不可能为true,直接返回。因此, 第二个表达式就不必计算了,也可以利用这一点来避免错误。例如, 在下面的表达式中:x != 0 && 1 / x > x + y;
如果 x 等于 0, 那么第二部分就不会计算。因此,如果x为0, 也就不会计算1 / x, 除以0的错误就不会出现。类似地,如果第一个表达式为true,expression1||expression2的值就自动为 true, 而无需计算expression2。最后一点,Java支持三元操作符?:,这个操作符有时很有用。如果条件为 true, 下面的 表达式 condition ? expression1 : expression2;
就为第一个表达式的值,否则计算为第二个表达式的值。例如, x < y ? x : y;
会返回 x 和 y 中较小的一个。