-
Java运算符
算数运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符
-
算术运算符
+ 、- 、* 、/ 、% 、++ 、--
自增自减运算符:
++、-- 运算符是种特殊的运算符,在算术运算符中需要两个运算符、而自增自减运算符只需要一个操作数。
int i=1,a=0;
* i++ 先运算在赋值,例如 a=i++,先运算a=i,后运算i=i+1,所以结果是a==1
* ++i 先赋值在运算,例如 a=++i,先运算i=i+1,后运算a=i,所以结果是a==2
如果还不懂,请看a++与++a区别之 经典分析,不容错过->https://blog.youkuaiyun.com/qq_34471736/article/details/54599901
总结:
前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算 。
-
关系运算符
== 、!= 、> 、 < 、 >= 、<=
两个值比较,其返回值为 true 或者false;
在Java中,true 与 false不表示任何数字,也不意味着 true就是1,false就是0,他们是没有具体的值的,只是简单的表示逻辑的字符串而已,与c语言、c++有所区别。
详细可看网址->https://blog.youkuaiyun.com/qq_40808344/article/details/79605486
-
位运算符
操作符 描述 & 如果相对应都是1,则结果为1,否则为0 | 如果相对应位都为0,则结果为0,否则为1 ^ 如果相应位值相同、则结果为0,否则为1 ~ 按位翻转操作数的每一位、0变1、1编0 << 按位左移运算符、操作数向左移动相应位数 >> 按位右移运算符、操作数向右移动相应位数 >>> 按位右移补0操作符、操作数向右移动相应位数、左边补0 Java中>> 与 >>>的区别:
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
譬如:
res = 20 >> 2;
20的二进制为 0001 0100,右移2位后为 0000 0101,则结果就为 res = 5;
res = -20 >> 2;
-20的二进制为其正数的补码加1,即 1110 1100,右移2位后为 1111 1011,结果为 res = -6;
而对于>>>符号而言:
res = 20 >>> 2; 的结果与 >> 相同;
res = -20 >> 2;
-20的二进制为 1110 1100,右移2位,此时高位补0,即 0011 1011,结果为 res = 59;
补充:
<< 是与>>对应的左移运算符,表示将exp1向左移动exp2位,在低位补0。其实,向左移动n位,就相当于乘以2^n。
左移没有<<<运算符!
-
逻辑运算符
&& 、|| 、!
短路原则:
当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
譬如:
public class test{
public static void main(String[] args){
int a = 10;//定义一个变量;
boolean b = (a<5)&&(a++<10);
System.out.println("使用短路逻辑运算符的结果为"+b);
System.out.println("a的结果为"+a);
}
}
运行结果:
使用短路逻辑运算符的结果为false a的结果为10
-
赋值运算符
= 、+= 、-= 、 *= 、/= 、(%)= 、<<= 、>>= 、&= 、^= 、|=
譬如:C += A 等价于C = C + A;
-
条件运算符
条件运算符也被称为三元运算符。该运算符有三个操作数、根据需要判断的布尔表达式值的真假来决定那个值赋给变量。
譬如:
public class Test {
public static void main(String[] args){
int a , b;
a = 10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "Value of b is : " + b );
// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
b = (a == 10) ? 20 : 30;
System.out.println( "Value of b is : " + b );
}
}
运行结果:
Value of b is : 30
Value of b is : 20
-
instanceof运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
譬如:
String name = "James"; boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真class Vehicle {}
public class Car extends Vehicle {
public static void main(String[] args){
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result);
}
}
运行结果:true
-
Java运算符优先级
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 操作符 关联性 后缀 ()[] .(点操作符) 从左到右 一元 ++-!~ 从右到左 乘性 * / % 从左到右 加性 + - 从左到右 移位 >> >>> << 从左到右 关系 > >= < <= 左到右 相等 == != 左到右 按位与 & 左到右 按位异或 ^ 左到右 按位或 | 左到右 逻辑与 && 左到右 逻辑或 || 左到右 条件 ? : 从右到左 赋值 = += -= *= /= %= >>= <<= &= ^= |= 从右到左 逗号 , 左到右