编程语言
首页 > 编程语言> > (一) JavaSE - 操作符

(一) JavaSE - 操作符

作者:互联网

一、基本概念

1、介绍:
 
表达式由操作数与操作符组成,操作数可以是一个常量、变量或表达式,操作符用于指明操作数的操作方式。

比如:1 + 2,1 > 2 && true。

 
 
2、优先级:

优先级操作符简介结合性
1[ ].( )方法调用,属性获取从左向右
2!、~、 ++、 –一元运算符从右向左
3* 、/ 、%乘、除、取模(余数)从左向右
4+ 、 -加减法从左向右
5<<、 >>、 >>>左位移、右位移、无符号右移从左向右
6< 、<= 、>、 >=、 instanceof小于、小于等于、大于、大于等于, 对象类型判断是否属于同类型从左向右
7== 、!=是否相等,是否不等于。从左向右
8&按位与从左向右
9^按位异或从左向右
10|按位或从左向右
11&&短路与从左向右
12||短路或从左向右
13?:条件运算符从右向左
14=、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>=混合赋值运算符从右向左

参考:https://www.sojson.com/operation/java.html

 
那么多似乎有点记不住,那么为表达式加括号()吧。

二、操作符分类

1、按作用的操作数个数分类:
 
一元操作符:操作的操作数为一个,比如:++、–
 
二元操作符:操作的操作数为两个,比如:+、-、*、/
 
三元操作符:操作的操作数为三个,比如:三元表达式 int i = (2 > 1 ? 2 : 1)

 
 
2、具体功能分:
 
算数操作符:+、-、*、%、/
 
逻辑操作符:&&、||
 
比较操作符:>、<、<=、>=。。。
 
按位操作符:&、| 、^、~
 
移位操作符:>>、<<、<<<
 
三元操作符:布尔表达式?表达式1:表达式2

三、操作符介绍

注意:对于byte、short、char在运算时会转换为int
 

1、算数操作符
 
+、-、*、/、%、++、–
 
 

注意:
 
(1)、除了boolean,其他基本数据类型都可以进行这些操作。
 
(2)、除了一元操作符外,其他算数操作符可以配置 =使用。

 
 
2、逻辑操作符
 
&&、||
 
 

注意:
 
(1)、左右两边均为布尔表达式。
 
(2)、会发生短路现象,即一旦通过判断左边的表达式,可以确定整个表达式,那么操作符右边的表达式就不会进行判断。

   @Test
   public void test1(){
       int i = 0;
       if(false && i++ > 0){
           //左侧表达式为false,&&操作,通过左侧已经可以判断整个表达式
       }

       System.out.println(i); //0

       --------------------------------------------
           
       int j = 0;

       if(true || j++ > 0){
           //左侧表达式为true, ||操作, 通过左侧已经可以判断整个表达式
       }
       System.out.println(j); //0

   }

3、比较操作符
 
== 、 > 、>= 、< 、<= 、 !=

 
 
4、赋值操作符
 
=、+= 、-= 、 *= 、/= 、%= 、&= 、^= 、 |=

   @Test
   public void test2(){
       int i = 0;
       i += 1; //等价于 i = i + 1;
       System.out.println(i);
       
       //其他的类似
   }

5、按位操作符
 
& 、 | 、 ^ (异或) 、~(取反)

 
 
介绍:
 
以上的操作符为位运算操作符,左右两侧可以是整数、字母、或者boolean表达式

   @Test
   public void test3(){
       System.out.println(~'a'); //-98
       System.out.println(3 ^ 2); //1
       System.out.println(true ^ false); //true
   }

 

~:即按位取相反数

比如:字符a对应数字97,二进制为0000000000000000000000000001100001,~操作后为11111111111111111111111110011110,互补后(-(取反 + 1))即为-98。

 
 
^:即相异1,相同为0(相异为true,相同为false)

比如:3^2,二进制为…0011 ^ …0010,异或操作后为…0001,即为1,负数也是类似的。

 
 
注意:
 
(1)、&、| 并没有短路现象,左右两边均会判断。
 
(2)、除 ~ 外可以配合 = 使用。
 
(3)、boolean表达式可以配合按位操作符使用,~除外(为了区别 “!”)。

   @Test
   public void test4(){

       System.out.println(~(2 > 1)); //报错
       

       int i = 0;
       System.out.println(i ^= 1);
       System.out.println(i &= 1);
       System.out.println(i |= 1);
       System.out.println(i ~= 1); //报错
   }

 
 
6、移位操作符
 
<<(左移)、>>(右移)、>>>(无符号右移)

 
 
介绍:

<<(左移):即数字带符号向左移位,左边高位丢弃,右边低位补0。
 
>>(右移):即数字带符号右移,被移位的二进制最高位是0(+),右移后,空缺位补0,最高位为1(-),右移后,空缺位补1。
 
>>>(无符号右移):被移位的最高位无论是否是0或1,空缺位都用0补

	@Test
   public void test1(){
       //<<
       System.out.println(Integer.toBinaryString(3)); //11
       System.out.println(Integer.toBinaryString(3<<1)); //110

       System.out.println(Integer.toBinaryString(-3));//11111111111111111111111111111101
      System.out.println(Integer.toBinaryString(-3<<1));//11111111111111111111111111111010

       //>>
       System.out.println(Integer.toBinaryString(3)); //11
       System.out.println(Integer.toBinaryString(3>>1)); //1

       System.out.println(Integer.toBinaryString(-3));//11111111111111111111111111111101
      System.out.println(Integer.toBinaryString(-3>>1));//11111111111111111111111111111110

       //>>>
       System.out.println(Integer.toBinaryString(3)); //11
       System.out.println(Integer.toBinaryString(3>>>1)); //1

       System.out.println(Integer.toBinaryString(-3));//11111111111111111111111111111101
     System.out.println(Integer.toBinaryString(-3>>>1));//01111111111111111111111111111110

   }

7、三元操作符
 
boolean表达式 ? 表达式1:表达式2;
 

 
示例:

   @Test
   public void test1(){
       int i = 2 > 1 ? 2 : 1;
   }

标签:System,操作符,println,左向右,JavaSE,表达式,out
来源: https://blog.csdn.net/qq_43341842/article/details/113004362