1.布尔运算
|
and运算符&
不仅可以应用于数字,还可以应用于布尔表达式。
但是,如您所知,有&&
and||
运算符。为什么我们要使用|
instead of||
和&
instead of &&
?这有什么意义吗?好像有。有时。
和逻辑运算符遵循所谓的惰性原则从左到右执行||
。&&
(expression1) || (expression2) || (expression3)
如果expression1
等于,则评估 andtrue
没有意义:不管结果如何。expression2
expression3
true
因此,在评估表达式时(它们是从左到右评估的),一旦我们得到true
,就会跳过对其余表达式的评估。如果expression2
包含expression3
方法调用,则不会调用这些方法!
逻辑运算符也是如此&&
:
(expression1) && (expression2) && (expression3)
如果expression1
等于,则评估andfalse
没有意义:不管结果如何。expression2
expression3
false
这是一个重要的事实,可以让您编写如下内容:
String s = null;
if (s != null && s.length() > 0) {
上面的例子永远不会给你一个NullPointerException,因为s.length()
只有当第一部分s! = null
是true
.
如果s
等于null
,运算符左边的部分&&
是false
,那么整个布尔表达式的结果是false
,所以右边的 ( s.length() > 0
) 部分不被计算。
如果你使用|
operator 或&
operator,那么就没有惰性求值:每个子表达式都会被求值。
2. Java中的操作优先级
您可能还记得在高中数学课上,乘法运算符的优先级高于加法运算符。括号的优先级更高:首先计算括号中的表达式,然后是乘法和除法,然后是加法和减法。
Java 中的运算符也有优先顺序。不同之处在于 a) 它们的数量稍微多一些,b) 对于某些运算符,操作数是从左到右计算的,而对于其他操作符 - 从右到左计算。
这是一张包含所有 Java 运算符的表格:
类别 | 操作员 | 关联的 |
---|---|---|
后缀 | () [] . |
从左到右 |
一元 | ++ -- ! ~ |
右到左 |
乘法 | * / % |
从左到右 |
添加剂 | + - |
从左到右 |
转移 | >> >>> << |
从左到右 |
关系型 | > >= < <= |
从左到右 |
平等 | == != |
从左到右 |
按位AND |
& |
从左到右 |
Exclusive OR (异或) |
^ |
从左到右 |
按位OR |
| |
从左到右 |
合乎逻辑AND |
&& |
从左到右 |
合乎逻辑OR |
|| |
从左到右 |
有条件的 | ?: |
右到左 |
任务 | = += -= *= /= %= >>= <<= &= ^= |= |
右到左 |
逗号 | , |
从左到右 |
顶行包含具有最高优先级的运算符。括号()
用于明确设置优先级。方括号[]
用于访问数组变量特定索引处的元素。点运算符 ( .
) 用于使用对对象或类的引用来访问字段和方法。
运算符在表中越靠下,它们的优先级就越低。
如果您在一个表达式中使用多个运算符,请不要偷懒:添加括号。
在 Java 中,您可以编写类似于 的内容if (a & 1<< b > ~c)
,但您不应该这样做。您不仅要为编译器编写代码,还要为其他程序员编写代码。代码的可读性越高越好。
3.前缀和后缀递增
如您所知,Java 有一个递增运算符 ( ++
) 和一个递减运算符 ( --
)。它们分别将变量的值增加和减少1
.
您可能不知道的是,这些运算符有两种类型:前缀(运算符位于变量之前)和后缀(运算符位于变量之后)。两种运算符的工作方式略有不同。
在 Java 中,您可以编写如下表达式:
int a = 5;
int b = a++;
如果++
运算符出现在变量之后并且变量是某个表达式的一部分(如上例所示),则表达式将使用变量的当前值,并且只有在之后变量才会增加1
.
换句话说,会发生这样的事情:
int a = 5;
int b = a;
a = a + 1;
也就是说,b
will be 5
,并不6
像你乍一看所想的那样。
如果++
运算符在变量之前并且变量是某个表达式的一部分,它会首先增加1
,然后它的值才会在表达式中使用。
int a = 5;
int b = ++a;
上面的例子等同于下面的例子:
int a = 5;
a = a + 1;
int b = a;
在这里,b
将等于6
。
甚至有一个 Java 程序员用来判断其他人是否也是 Java 程序员的例子:
int a = 5;
int b = ++a + ++a;
是的,你也可以这样写。
这个例子将编译得很好并变成这样的东西:
int a = 5;
a = a + 1;
int v1 = a;
a = a + 1;
int v2 = a;
int b = v1 + v2;
对于--
运营商来说,一切都如出一辙。
GO TO FULL VERSION