Java的运算符主要有:
赋值运算符
算术运算符
比较运算符
逻辑运算符
其中,复制运算符比较简单,就是一个“=”等号,格式也相对简单,表示吧右边的值赋给左边:
变量名 = 表达式(或者一个具体值)
算术运算符,也是平时常见的:+(加) -(减) *(乘) /(除) %(取余) 以及 ++(自增) --(自减)
结合复制运算符和算术运算符,有一些复合赋值运算符: += -= *= /= %=,其实和 ++ 与 -- 一样,这些只是一种特殊的情况,特殊在,特们是吧自己的值取出来经过+ - * / %运算以后再赋给自己。
int i = 15;
//下面代码效果是一样的
i += 10;
i = i+10;
值得注意的一点是:如果运算的类型不一致,会自动转换成最大兼容性的一种值进行计算,例如int类型的一个数和double的一个数相加,结果是double类型的,这一点在前面说数据类型的时候也提到过了。
int i = 10;
double d = 15.5;
int x = i+d; //这一行代码是错的
double y = i+d; //这一行是正确的
比较运算符,是对于两个数的结果进行比较,得处一个boolean类型的值,一般都是作为条件语句的条件出现的,具体的有:>(大于) <(小于) >=(大于或等于) <=(小于或等于) ==(等于) !=(不等于) ,这个应该是和以前数学里面的一样的,并且符合我们的思维习惯,应该挺好理解。
但是要注意两点,比较后的结果是一个boolean类型的结果,如果不是作为条件语句的条件的话,要有一个boolean类型的变量接收;
int i1 = 10;
int i2 = 15;
i1>i2; //这样写会变异报错,必须接收如下
boolean bool = i1>i2;
第二个就是 = 是赋值,而 == 才是等于,这一点是刚开始很容易出错的,常常会把=错当成==用,导致错误。
逻辑运算符,主要是进行一些逻辑运算的,有:
&& 短路与,两个条件为真,才返回真
& 不短路与,两个条件为真,才返回真
|| 短路或,有一个条件为真,就返回真
| 不短路或,有一个条件为真,就返回真
! 非,表示结果取反
^ 亦或,两个条件一样时返回真,不一样返回假
其中 && 与 & 之间的区别是:&&当遇到第一个条件为假,就不执行后面的判断,而&会执行所有的判断
int i = 10;
boolean bool1 = false;
boolean bool2 = bool1 && (i=20)==10;
System.out.println("bool2="+bool2+"\ti="+i);
//bool2=false i=10
boolean bool3 = bool1 & (i=20)==10;
System.out.println("bool3="+bool3+"\ti="+i);
//bool3=false i=20
由两次&&运算可以看出,bool2与bool3的值是一样的,所以&&与&的结果是一致的,但是后半段语句&&没有执行,&执行了,后面使用IDE进行Debug就可以很直观的看到这一点了。
同样的,||与|之间的区别也是,||只有有一个条件为真,就不再之后后面的判断,而|会执行后面的判断。
!是对结果取反,也就是说 !true等于false ! false等于true
Java运算符的优先级:
( ) ! 算术运算符 条件运算符 && || 赋值运算符
是从左向右的顺序依次执行的,所以遇到括号会先算括号里的,针对于这些运算符的优先级,网上有各种组合的式子来求结果,这种式子可以作为理解运算符的优先级的练习,但是,在开发中,建议用(())括号来分割运算表达式,这样便于我们直观的理解。
三目运算符,作为一个比较特殊的运算符,这里提一下,其实在开发中,三目运算符一般是代替if(){}else{}来简化代码的,格式如下:
变量名 = 条件?值1:值2;
就是说,如果满足条件,变量的值是值1,否则就是值2。当然,三目运算符也是可以嵌套的。
int i = 10;
//三目运算符
String str1 = i>18 ? "成年人" : "未成年人";
//三木运算符的嵌套
String str2 = i>18 ? i>65? "老年" : "壮年" : "未成年人";