前言
相信很多小伙伴遇到过一个问题,运算符的优先级,在程序运行的过程中哪些运算优先进行,哪些运算后执行呢。很多入门的伙伴都受此困扰。本次将基于运算符进行一次简单系统的介绍。
运算符
程序运行的过程就是不断的进行数学运算的过程,在Java中也有各种各样的运算符,主要包含的运算符有:算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符。算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。
算术运算符
操作符 | 名称 | 描述 |
+ | 加 | 两个值相加 |
- | 减 | 两个值相减 |
* | 乘 | 两个值相乘 |
/ | 除 | 两个值相除 |
% | 取余 | 余数 |
++ | 自增 | 操作数的值增加1 |
-- | 自减 | 操作数的值减少1 |
算术运算符示例如下:
public static void main(String[] args) { int i = 5; int j = 3; System.out.println("i+j = " + (i + j)); System.out.println("i-j = " + (i - j)); System.out.println("i*j = " + (i * j)); System.out.println("i/j = " + (i / j)); System.out.println("i%j = " + (i % j)); System.out.println("i++ = " + i++); System.out.println("j-- = " + j--); System.out.println("i = " + i); System.out.println("j = " + j); System.out.println("++i = " + ++i); System.out.println("--j = " + --j); }
执行上面算术运算符,输出结果:
i+j = 8 i-j = 2 i*j = 15 i/j = 1 i%j = 2 i++ = 5 j-- = 3 i = 6 j = 2 ++i = 7 --j = 1
通过输出结果可以看到i++ 和j--都是先使用,使用之后进行自增或者自减。而++i和--J都是先进行自增1 或者自减1之后进行运算的。
关系运算符
操作符 | 名称 | 描述 |
== | 相等 | 操作符左右两边值相同 为真 |
!= | 不等于 | 操作符左右两边值不相同 为真 |
> | 大于 | 操作符左边值大于右边值 为真 |
< | 小于 | 操作符左边值小于右边值 为真 |
>= | 大于等于 | 操作符左边值大于等于右边值 为真 |
<= | 小于等于 | 操作符左边值小于等于右边值 为真 |
示例
关系运算符示例如下:
public static void main(String[] args) { int i = 5; int j = 3; System.out.println("i==j 为 " + (i ==j)); System.out.println("i!=j 为 " + (i !=j)); System.out.println("i>j 为 " + (i >j)); System.out.println("i<j 为 " + (i <j)); System.out.println("i>=j 为 " + (i >=j)); System.out.println("i<=j 为 " + (i <=j)); }
执行上面关系运算符之后,输出结果为:
i==j 为 false i!=j 为 true i>j 为 true i<j 为 false i>=j 为 true i<=j 为 false
位运算符
位操作是程序设计中对位模式按位或二进制数的一元和二元操作。
操作符 | 名称 | 描述 |
& | 与 | 同1 为1否则为0 |
| | 或 | 有1为1 否则为0 |
^ | 非 | 相同为0,否则为1 |
〜 | 按位取反运算符 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 |
<< | 按位左移运算符 | 左操作数按位左移右操作数指定的位数 |
>> | 按位右移运算符 | 左操作数按位右移右操作数指定的位数 |
>>> | 按位右移补零操作符 | 移动得到的空位以零填充 |
逻辑运算符
操作符 | 名称 | 描述 |
&& | 逻辑与 | 当且仅当两个操作数都为真 |
| | | 逻辑或 | 如果任何两个操作数任何一个为真w |
! | 逻辑非 | 用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 |
逻辑运算符示例如下:
public static void main(String[] args) { int i = 5; int j = 3; System.out.println("i && j 为 " + (i==5 && j==3)); System.out.println("i || j 为 " + (i==5 || j==3)); System.out.println("i ! j 为 " + (i !=j)); }
逻辑运算符运行结果为:
i && j 为 true i || j 为 true i!j 为 true
赋值运算符
操作符 | 名称 | 描述 |
= | 赋值运算 | |
+ = | 加和赋值 | |
- = | 减和赋值 | |
* = | 乘和赋值 | |
/ = | 除和赋值 | |
(%)= | 取模和赋值 | |
<< = | 左移位赋值 | |
>> = | 右移位赋值 | |
&= | 按位与 | |
^ = | 按位异或 | |
| = | 按位或 |
赋值运算符示例如下:
public static void main(String[] args) { int i = 5; int j = 3; System.out.println("i=j 为 " + (i =j)); i = 5;j = 3; System.out.println("i+ =j 为 " + (i +=j)); i = 5;j = 3; System.out.println("i- =j 为 " + (i -=j)); i = 5;j = 3; System.out.println("i* =j 为 " + (i *=j)); i = 5;j = 3; System.out.println("i/ =j 为 " + (i /=j)); i = 5;j = 3; System.out.println("i(%)=j 为 " + (i %=j)); i = 5;j = 3; System.out.println("i<< =j 为 " + (i <<=j)); i = 5;j = 3; System.out.println("i>> =j 为 " + (i >>=j)); i = 5;j = 3; System.out.println("i&=j 为 " + (i &=j)); i = 5;j = 3; System.out.println("i^ =j 为 " + (i ^=j)); i = 5;j = 3; System.out.println("i| =j 为 " + (i |=j)); }
赋值运算符运行结果如下:
i=j 为 3 i+ =j 为 8 i- =j 为 2 i* =j 为 15 i/ =j 为 1 i(%)=j 为 2 i<< =j 为 40 i>> =j 为 0 i&=j 为 1 i^ =j 为 6 i| =j 为 7
三目运算符
三目运算符有3个操作数,并且需要判断布尔表达式的值,在三目运算符“?”前是表达式,如果表达式的值为真,则输出第二位操作数的值,如果三目运算符的结果为假,则输出第三位操作数的值
操作符 | 名称 | 描述 |
? : | 表达式真假?真值:假值 |
三目运算符示例如下:
public static void main(String[] args) { int i = 5; int j = 3; String str = i > j ? "i>j" : "i<j"; System.out.println(str); }
三目运算符运行结果为:
i>j
Java运算符优先级
当多个运算符出现在一个表达式中,这是我们需要按照一定的执行顺序去处理,否则可能出现各种各样的结果。本文末尾总结了一下运算符的基本执行顺序,其中约靠左的优先级越好。优先级从高到低依次为:
一元运算 > 乘除 > 加减 > 移位 > 关系 > 相等 > 按位与 > 按位异或 > 按位或 > 逻辑与 > 逻辑或 > 三目运算符 > 赋值
结语
好了,以上就是Java中常用运算符及其优先级总结