JAVA学习笔记(第一章第六回合)Java运算符

  • 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.csdn.net/qq_34471736/article/details/54599901

总结:

前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。

后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算 。

  • 关系运算符

== 、!= 、> 、 < 、 >= 、<=

两个值比较,其返回值为 true 或者false;

在Java中,true 与 false不表示任何数字,也不意味着 true就是1,false就是0,他们是没有具体的值的,只是简单的表示逻辑的字符串而已,与c语言、c++有所区别。

详细可看网址->https://blog.csdn.net/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运算符优先级

 下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

类别 操作符 关联性
后缀 ()[] .(点操作符) 从左到右
一元 ++-!~ 从右到左
乘性 * / % 从左到右
加性 + - 从左到右
移位 >> >>> << 从左到右
关系 >  >=   <   <= 左到右
相等 ==  != 左到右
按位与 & 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 || 左到右
条件 ? : 从右到左
赋值 =   +=  -=  *=  /=  %=  >>=  <<=  &=  ^=  |= 从右到左
逗号 左到右

 欲知后事如何,且听下回分解。。。

猜你喜欢

转载自blog.csdn.net/weixin_40686681/article/details/81625641