—— 本文参照 Learn Java for Android Development (第三版)
最近好多在群里说android要退了,将要跟Chorme合并了,android将何去何从呢。。。。但是作为一个程序员我只能简单地做好我能做的事情,我没法去想那么多还没有发生的事情。
条件运算符
条件运算符主要有条件与(&&),条件或(||),条件运算符(?:)。前面两个条件运算符首先会判断运算符左边的操作数,然后再根据左边的判断结果来选择是否再对右边的进行判断。第三个操作符的结果由第三个布尔操作数决定。
条件与运算符的左边操作数如果是true的话会判断右边的操作数,否者的话就不对右边的操作数进行判断。例如:age > 64 && stillWorking,首先我们会判断age > 64,如果这个子表达式为真的话,就会对stillWorking的真假进行判断,stillWorking值就代表了真个表达式的真假。如果age > 64 如果为假的话,stillWorking 就不进行判断了。
条件或运算符的左边操作数为false的话我们才会去判断右边的操作数,否者的话就不对右边的操作数进行判断,例如:value < 20 || value > 40,首先判断子表达式value < 20,如果子表达式为flase的话就对value > 40进行判断,value > 40也决定了整个表达式的值。如果value < 20本来就为真的话那么value > 40就不进行判断了。
条件与和条件或其实在某种意义上提高了运算效率,因为在很多运算表达式里面我们只需要对表达式的前半部分做出判断就可以了,例如,如果条件与的左边操作数已经是false,那么无论右边的操作数是什么都影响不了整个表达式的结果为false的事实了。
在实际的开发中如果没有注意到上面的内容的话可能会犯错。比如这样子的一个表达式:age > 64 &&++numEmployees > 5,这个表达式的本意是想条件与运算结束以后numEmployees 能增加1,但是在实际的运算过程中只有那些age>64的情况numEmployees才会加1,因为如果age小于等于64的话后面的表达式就不会做判断了。
条件运算符还有一个很大的用处,那就是通过一个表达式然后返回两个操作数中的一个的时候,下面的例子是通过判断一个布尔变量然后用1或者0作为这个变量的返回值:
boolean b = true;
int i = b ? 1 : 0; //结果是1被赋值给了i
下面用一段代码来实际体验一些条件操作符:
public class Test
{
public static void main(String[] args)
{
int age = 65;
boolean stillWorking = true;
System.out.println(age > 64 && stillWorking);
age--;
System.out.println(age > 64 && stillWorking);
int value = 30;
System.out.println(value < 20 || value > 40);
value = 10;
System.out.println(value < 20 || value > 40);
int numEmployees = 6;
age = 65;
System.out.println(age > 64 && ++numEmployees > 5);
System.out.println("numEmployees = " + numEmployees);
age = 63;
System.out.println(age > 64 && ++numEmployees > 5);
System.out.println("numEmployees = " + numEmployees);
boolean b = true;
int i = b ? 1 : 0; // 1 assigns to i
System.out.println("i = " + i);
b = false;
i = b ? 1 : 0; // 0 assigns to i
System.out.println("i = " + i);
}
}
编译javac Test.java
执行 java Test
结果如下:
true
false
false
true
true
numEmployees = 7
false
numEmployees = 7
i = 1
i = 0
Page 61