JavaSE基础篇(三)——运算符

1. 基本运算符

  • Java语言支持如下运算符:

    • 算数运算符:+,-,*,/,%,++,–
    • 赋值运算符:=
    • 关系运算符:>,<,>=,==,!=,instandeof
    • 逻辑运算符:&&,||,!
    • 位运算符:&,|,^,~,>>,<<,>>>(了解)
    • 条件运算符:?:
    • 扩展赋值运算符:+=,-=,*=,/=
  • 注意事项

    • 运算前后产生的数据类型转换、内存溢出和精度问题。

      //二元运算符
      int a = 10;
      int b = 20;
      int c = 25;
      int d = 25;
      System.out.println(a+b);            //10+20 输出 30
      System.out.println(a-b);            //10-20 输出 -10
      System.out.println(a*b);            //10*20 输出 200
      System.out.println(a/b);            //10÷20 输出 0    
      									//int类型相除得到int类型,舍了小数点后的数字
      System.out.println(a/(double)b);    //10÷20 输出 0.5
      System.out.println(c%b);			//25%20 输出 5    
      									//25÷20 = 1余5
      long  e = 123123123123123L;
      int   f = 123;
      short g = 10;
      byte  h = 8;
      System.out.println(e+f+g+h);          //输出 long   
      System.out.println(f+g+h);            //输出 int   
      System.out.println(g+h);              //输出 int   
      
      //关系运算符返回的结果:布尔类型(true/false)
      int i = 10;
      int j = 20;
      System.out.println(i>j);	//输出 false
      System.out.println(i<j); 	//输出 true
      System.out.println(i==j); 	//输出 false
      System.out.println(i!=j); 	//输出 true
      

2. 自增自减和Math类

  • 自增运算符

    • 自增运算可视为两个步骤:赋值(=),加一(+1)。

    • b=a++; => b=a; a=a+1;

    • b=++a; => a=a+1; b=a;

      int a = 1;
      int b = a++;
      System.out.println(a);	//输出 2
      System.out.println(b);	//输出 1
      
      int c = 1;				
      int d = ++c;
      System.out.println(c);	//输出 2
      System.out.println(d);	//输出 2
      
  • 幂运算

    • 幂运算不属于基本运算,可使用Java提供的工具类(Math)来操作。

      double a = Math.pow(2,3);	//2^3 = 2*2*2 = 8
      

3. 逻辑运算与位运算

  • 逻辑运算包括与(&&),或(||),非(!)。

    • 与(&&):都为真(true),才为真(true),否则假。

    • 或(||) :都为假(false),才为假(false),否则真。

    • 非( ! ):真(true)变假(false),假(false)变真(true)。

      boolean a = true;
      boolean b = false;
      System.out.println(a&&b);   //输出 false
      System.out.println(a||b);   //输出 true
      System.out.println(!a);     //输出 false
      
  • 短路运算

    • 与(&&)运算中,运算符前的表达式为假,则不执行运算符后的表达式。

      int a = 1;
      boolean b = (a>2)&&((a++)<1);
      System.out.println(b);			//输出 false
      System.out.println(a);			//输出 1	没有执行a++ 证明&&后的表达式没有执行
      
  • 位运算用于计算二进制数,以位为单位进行计算(或者称之为比较更通俗易懂),包括与(&),或(|),异或(^),取反(~),左移(<<),右移(>>)等。

    • 与(&):都为1,才为1,否则为0。

    • 或(|):都为0,才为0,否则为1。

    • 异或(^):相同为0,不同为1。

    • 取反(~):0变1,1变0。

      A   = 0011 1100
      B   = 0000 1101
      A&B = 0000 1100
      A|B = 0011 1101
      A^B = 0011 0001
      ~B  = 1111 0010
      
    • 左移(<<):将所有1向左移动,移一位相当于十进制数乘以2。

    • 右移(>>):将所有1向右移动,移一位相当于十进制数除以2。

      System.out.println(3<<2);  //输出 12 0000 0011 <<2位 0000 1100
      System.out.println(2<<3);  //输出 16 0000 0010 <<3位 0001 0000
      System.out.println(12>>3); //输出 1  0000 1100 >>3位 0000 0001
      System.out.println(24>>3); //输出 3  0001 1000 >>3位 0000 0011
      

4. 其他

  • = :赋值运算,从右向左执行。

    a = b; //将a的值赋值给b
    
  • -= :先进行减运算,再执行赋值运算。

    a -= b; //a = a - b;
    
  • += :先进行加运算,再执行赋值运算。

    a += b; //a = a + b;
    
  • *= :先进行乘法运算,再执行赋值运算。

    a *= b; //a = a * b;
    
  • /= :先进行除法运算,再执行赋值运算。

    a /= b; //a = a / b;
    
  • +:加号除了是基本运算符,还是字符串连接符。表达式前+字符串会影响字符串后的表达式,表达式后加字符串不影响字符串前的表达式。

    int a = 10;
    int b = 20;
    System.out.println(a+b);	//输出 30
    System.out.println(""+a+b); //输出 1020
    System.out.println(a+b+""); //输出 30
    
  • 三目运算符:? :

    • x ? y :z; 如果x==true,结果为y,否则结果为z。
    int score = 50;
    String type = score < 60 ? "不及格":"及格";
    System.out.println(type);	//输出 不及格
    
  • 运算符优先级

    • 一般来说应用性不大,开发中通常使用()自定义优先级。
    优先级 运算符 结合性
    1 ()、[]、{} 从左向右
    2 !、+、-、~、++、– 从右向左
    3 *、/、% 从左向右
    4 +、- 从左向右
    5 >>、<<、>>> 从左向右
    6 <、<=、>、>=、instanceof 从左向右
    7 ==、!= 从左向右
    8 & 从左向右
    9 ^ 从左向右
    10 | 从左向右
    11 && 从左向右
    12 || 从左向右
    13 ? : 从右向左
    14 =、+=、-=、*=、/=、&=、|=、^=、~=、<<=、>>=、>>>= 从右向左

猜你喜欢

转载自blog.csdn.net/qq_42651415/article/details/114382414
今日推荐