Java中运算符分为以下几类:

  • 算数运算符(+ - * / % ++ --)
  • 关系运算符(== != > < >= <=)
  • 位运算符 (& | ^ ~ << >> >>>)
  • 逻辑运算符(&& || ! & |)
  • 赋值运算符(= += -= *= /= (%)= <<= >>= &= ^= |=)
  • 其他运算符(三元运算符,instanceof运算符)


算数运算符



+:运算符两侧数相加,如果一个数加一个字符串会进行字符串拼接。

-:运算符左侧数减去右侧数。

*:运算符两侧数相乘。

/:运算符左侧数除以右侧数。

%:运算符左侧数除以右侧数的余数。

++:操作数的值加1

–:操作数的值减1



前缀后缀自增自减
1、前缀自增自减(++x,–x):先进行自增或者自减运算,在进行表达式运算。
2、后缀自增自减(x++,x–):先进行表达式运算,在进行自增或者自减运算



代码实例:

public class Operator {
    public static void main(String[] args) {
        int x = 1;   //定义一个值				   (1)
        System.out.println(++x);    //前缀自增		(2)
        System.out.println(x++);    //后缀自增		(3)
        System.out.println(--x);    //前缀自减		(4)
        System.out.println(x--);    //后缀自减		(5)
        System.out.println(x);		//最后输出x的值  (6)
    }
}

运行结果为:

2
2
2
2
1

分析运行过程:

(1):定义int类型x,赋值 1。

(2):前缀自增先做自增运算,x就等于2,然后打印2。

(3):后缀自增先进行表达式运算,先执行打印,然后在做自增运算,x就等于3。

(4):前缀自减先做自减运算,x就等于2,然后打印2。

(5):后缀自减先进行表达式运算,先执行打印,然后在做自减运算,x就等于1。

(6):最后x等于1,打印1。



关系运算符

==:运算符两边值相等,则条件为真。

!=:运算符两边值不相等,则条件为真

> :运算符左侧值大于右侧值,则条件为真

<:运算符左侧值小于右侧值,则条件为真

>=:运算符左侧值大于等于右侧值,则条件为真

<=:运算符左侧值小于等于右侧值,则条件为真



位运算符

Java定义了位运算符,是按照二进制位来计算的,应用于整数型(byte,short,int,long)和字符型(char)。



&:与。如果相对应的位都是1,则结果为1,否则为0。

|:或。如果相对应的位都是0,则结果为0,否则为1。

^:异或。如果相对应位值相同,则结果为0,否则为1。

~:非。位上的值取反,如果是0则为1,如果是1则为0。

<<:左移。运算符左侧为运算的值,右侧为向左移动的位数。

>>:带符号右移。运算符左侧为运算的值,右侧为向右移动的位数。

>>>:无符号右移。运算符左侧为运算的值,右侧为向右移的位数,移动得到的空位以零填充。



代码实例:

public class Operator {
    public static void main(String[] args) {
        
        byte a = 1; //0000 0001
        byte b = 9; //0000 1001
        
        System.out.println("&:" + (a & b));       //1 = 0000 0001
        System.out.println("|:" + (a | b));       //9 = 0000 1001
        System.out.println("^:" + (a ^ b));       //8 = 0000 1000
        System.out.println("~:" + (~a));          //-2 = 1111 1110
        System.out.println("<<:" + (b << a));     //18 = 0001 0010
        System.out.println(">>:" + (b >> a));     //4 = 0100
        System.out.println(">>>:" + (b >>> a));   //4 = 0000 0100
    }
}

运行结果为:

&:1
|:9
^:8
~:-2
<<:18
>>:4
>>>:4



>>与>>>运算符的区别
>> :带符号右移(相当于除以2)。正数右移高位补0,负数右移高位补1。
>>>:无符号右移。无论正数还是负数,高位都补0。



逻辑运算符

&&:逻辑与。运算符两边都为真,条件为真。

||:逻辑或。运算符两边任何一个为真,条件为真。

!:逻辑非。反转条件结果,如果条件为真,则结果为假,如果条件为假,则结果为真。

&,|:如果运用在逻辑运算中,则为逻辑运算符。如果运用在算数运算中,则为位运算符。

&&与&,||与|区别



赋值运算符

=(赋值):运算符右侧值赋值给左侧值。

+=:加赋值。

-=:减赋值。

*=:乘赋值。

/=:除赋值。

%=:模赋值。

<<=:左移赋值。

>>=:右移赋值。

&:与赋值。

^=:异或赋值。

|=:或赋值。



代码实例:

public class Operator {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 0;
        c = a + b;
        System.out.println("c = a + b = " + c );
        c += a ;
        System.out.println("c += a  = " + c );
        c -= a ;
        System.out.println("c -= a = " + c );
        c *= a ;
        System.out.println("c *= a = " + c );
        a = 10;
        c = 15;
        c /= a ;
        System.out.println("c /= a = " + c );
        a = 10;
        c = 15;
        c %= a ;
        System.out.println("c %= a  = " + c );
        c <<= 2 ;
        System.out.println("c <<= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c &= a ;
        System.out.println("c &= a  = " + c );
        c ^= a ;
        System.out.println("c ^= a   = " + c );
        c |= a ;
        System.out.println("c |= a   = " + c );
    }
}

运行结果为:

c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10



三元运算符

该运算符用作条件判断,有3个操作数,并且需要判断布尔表达式的值,主要是决定哪个值应该赋值给变量。

语法格式:variable x = (condition) ? value1 : value2;

如果condition为true,则表达式值为value1,否则为value2。

代码实例:

public class Operator {
    public static void main(String[] args) {
        int n = 0;
        System.out.println(n == 0 ? 1 : 2);
        System.out.println(n != 0 ? 1 : 2);
    }
}

运行结果为:

1
2



instanceof 运算符

该运算符用于操作对象实例,检查对象是否是一个特定类型(类或接口)。

语法格式:(Object o) instanceof (class/interface type) ;

代码实例:

public class Operator {
    public static void main(String[] args) {
        Operator operator = new Operator();
        System.out.println(operator instanceof Operator);
    }
}

运行结果如下:

true



Java运算符优先级

后缀

() [] . (点操作符)

左到右

一元

expr++ expr–

从左到右

一元

++expr --expr + - ~ !

从右到左

乘性

* /%

左到右

加性

+ -

左到右

移位

>> >>> <<

左到右

关系

> >= < <=

左到右

相等

== !=

左到右

按位与


左到右

按位异或

^

左到右

按位或

|

左到右

逻辑与

&&

左到右

逻辑或

| |

左到右

条件

?:

从右到左

赋值

= + = - = * = / =%= >> = << =&= ^ = | =

从右到左

逗号


左到右


面试常问

1、前缀后缀自增自减笔试题。

2、+=/-=笔试题。

3、&&与&,||与|的区别。

4、>>与>>>区别。





——THE END——