【Java笔记】04 运算符

一、算数运算符

运算符:+(正号)、-(负号)、+、-、*、/、%、++、—、 +(字符串相加)
1./

  1. System.out.println(10 / 4); //2
  2. System.out.println(10.0 / 4); //2.5
  3. double d = 10 / 4;//2.0

2.% 取模,取余
%运算, a % b = a - a / b b
10%3=1 //10-10/33=1
-10%3=-1 //(-10)-(-10)/3
3=-1
10%-3=1 //10-10/(-3)*(-3)=1
%运算,a是小数的情况下, a % b = a - (int)a / b b
-10.5%3 = -10.5 - (-10)/3*3 = -10.5+9=-1.5
3.++

  • 作为独立语句
    i++;//自增,等价于 i=i+1;
    ++i;//自增,等价于i=i+1;
  • 作为表达式使用
    前++:i先自增,后赋值
    后:i++先赋值,后自增
  1. int i = 8;
  2. int k = ++i;//i=i+1;k=i;
  3. System.out.println("k=" + k + "i=" + i); //9 9
  4. int j = 8;
  5. int l = j++;//k=j;j=j+1;
  6. System.out.println("j=" + j + "l=" +l); //8 9
  1. int i = 1;//i->1
  2. i = i++;//规定 使用临时变量:(1)temp=i;(2)i=i+1;(3)i=temp;
  3. System.out.println(i); // 1
  1. int i = 1;//i->1
  2. i = ++i;//规定 使用临时变量:(1)i=i+1;(2)temp=i;(3)i=temp;
  3. System.out.println(i); // 2

二、关系运算符(比较运算符)

结果都是boolean,即true或false
关系运算符组成的表达式,称为关系表达式 boolean = a > b;
1.== 相等
2.!= 不等
3.<
4.>
5.<=
6.>=
7.instance of 检查是否是类的对象
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

三、逻辑运算符

  1. a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
  2. a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false

  • &和&&的区别
    1.&&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
    2.&逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
  1. int a = 4;
  2. int b = 9;
  3. //对&&,如果第一个条件为false,后面的条件不再判断,即++b不执行
  4. if(a < 1 && ++b < 50){
  5. System.out.println("ok");
  6. }
  7. System.out.println("a=" + a + "b=" + b); //4 9
  8. //对&,如果第一个条件为false,后面的条件判断,即++b执行
  9. if(a < 1 & ++b < 50){
  10. System.out.println("ok");
  11. }
  12. System.out.println("a=" + a + "b=" + b); //4 10

  1. a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
  2. a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false

  • |和||的区别
    1.||短路或:如果第一个条件为true,后面条件不判断,最终结果为true
    2.|逻辑或:如果第一个条件为true,后面条件判断,最终结果为true

  1. !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
  2. a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
  1. int x = 5;
  2. int y = 5;
  3. //x++ == 6,后++,先比较后自增,比较5==6,false;x自增=6;
  4. //++y == 6,先++,先自增后比较,y自增=6;比较6=6,true;
  5. if(x++ == 6 & ++y == 6){
  6. x=11;
  7. }
  8. System.out.println(x,y); // 6 6

四、赋值运算符

1.基本赋值运算符=
2.复合赋值运算符 +=,-=,/=,%=
复合赋值运算符会进行类型转换

  1. byte b = 3;
  2. b += 2; //等价于 b = (byte)(b + 2);

五、三元运算符

条件表达式?表达式1:表达式2;
表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)

六、运算符优先级

. () {} ; ,
R->L ++ — ~ !
L->R * / + -
L->R + -
L->R << >> >>> 位移
L->R < > <= >= instanceof
L->R == !=
L->R &
L->R ^
L->R |
L->R &&
L->R ||
L->R ? :
R->L = *= /= %=
+= -= <<= >>=
>>>= &= ^= |=

从上到下优先级降低