(五)逻辑运算符
用于两个布尔型的变量或常量,有以下六个:
1.&&:短路与,都true才true;
2.&:不短路与,同上;
3.||:短路或,有一个true就返回true;
4.| :不短路或,;
5.!:非,只需要一个操作数;
6.^: 异或,两个操作数不同,返回true
短路:指的是前一个操作数如果返回的是false,则不再执行后面的
System.out.println(!false);//返回true
int a = '6';//对应的值为54
//下面,第一个2>1返回的是true,所以会执行后面的,最后结果是55
System.out.println(2>1&&a++>6);
System.out.println(a);
//当第一个3>4返回的是false,因此不再执行后面的,a的最后的值是54
System.out.println(3>4&&a++>6);
System.out.println(a);
//同理短路||或,当第一个返回的是true时,就不再执行第二个,这里不再赘述
(六)三目运算符
只有一个: ? :
(expression)?if-true-statement:if-false-statement;
例子:
String str = 5>3?"五是大于三的":"五不会大于三的";
System.out.println(str);
//也可以嵌套
int a = 11;
int b = 12;
System.out.println(a>b?"a>b":(a<b?"a<b":"a=b"));
三目算法大部分是作为if else 的精简写法,也就相当于:
String str2 = null;
if(5>3)
{
str2 = "五是大于三的";
}else {
str2 = "五不会大于三的";
}
区别:if后的代码块可以有多个语句,而三目运算符不支持
(八)运算符结合性和优先级
1.结合性:除了单目运算符、赋值运算符和三目运算符是从右到左运算,其他都是从左到右运算的;而乘法和加法是两个可以结合的运算,即左右两边的操作数可以互换位置不影响结果。
2.优先级
其中instanceof和(type)运算符与类、继承有关,之后再详细介绍这里特别说明:源代码的可读性比代码运算效率更重要,因此特别注意:
(1)不要把一个表达式写的过于复杂,可以分成几步完成;
(2)不要过多依赖运算符优先级来控制执行的顺序,这样可读行太差,尽量使用()来控制表达式的执行顺序。