在 Java 中,运算符(Operator)用于对数据进行各种操作,例如:

  • 数学计算
  • 比较大小
  • 判断条件
  • 逻辑运算
  • 位运算
  • 赋值
  • 三元表达式等

可以说:

没有运算符,就没有程序中的计算与逻辑。

一、什么是运算符?

运算符(Operator),就是用于操作数据的一种特殊符号。例如:

int a = 10;
int b = 20;

int c = a + b;

// 这里的 + 号,就是加法运算符。

Java中运算符可以分为:

分类常见运算符
算术运算符+ - * / % ++ --
赋值运算符= += -= *= /= %=
关系运算符> < >= <= == !=
逻辑运算符&&
位运算符<< >> >>> &
三元运算符?:

二、算术运算符

算术运算符用于数学计算。

运算符作用
+加
-减
*乘
/除
%取余

算术运算符都是二元运算符,使用时必须要有左右两个操作数。

2.1 加法

int a = 10;
int b = 20;

System.out.println(a + b); // 输出 30

2.2 减法

System.out.println(20 - 5); // 输出 15

2.3 乘法

System.out.println(8 * 6); // 输出 42

2.4 除法

System.out.println(3 / 2);// 输出 1

按照数学逻辑来说,这里应该是1.5 但是在Java中输出结果为1,原因是:

两个int相除,结果仍热是int,会向下取整,即小数点之后全部舍弃掉了。

如果想要得到小数,可以使用以下方式:

double d = a*1.0 / b;
System.out.println(d);
// 或者
System.out.println((double)3 / 2);

2.5 取余

System.out.println(10 % 3);// 输出 1
// 因为:10 = 3 * 3 + 1,所以余数就是 1

取余常见的应用:

// 判断奇偶数
int num = 15;

if (num % 2 == 0){
    System.out.println("偶数");
}else{
    System.out.println("奇数");
}
// 判断是否能整除
if (100 % 5 == 0){
    System.out.println("可以整除");
}

三、自增与自减运算符

3.1 自增(++)

int a = 10;

a++;

System.out.println(a);// 输出 11

等价于:

a = a + 1;

3.2 自减(--)

int a = 10;

a--;

System.out.println(a);// 输出 9

等价于:

a = a - 1;

四、前置++与后置++

4.1 前置++

int a = 5;

int b = ++a;

System.out.println(a);// 输出 6
System.out.println(b);// 输出 6

// 执行过程如下:
// a = a + 1
// 再赋值给 b

4.2 后置++

int a = 5;

int b = a++;

System.out.println(a);// 输出 6
System.out.println(b);// 输出 5

// 执行过程如下:
// 先把a原来的值赋值给b
// 再使a+1

总的来说就是:前置先加后用,后置先用后加

例题:

int i = 5;

int j = i++ + ++i;

/*
执行过程:
第一次:
i++ → 5
i = 6

第二次:
++i
i = 7
值为7

因此 5 + 7 = 12
最后 i = 7,j = 12

在平常开发中不要写这种代码,可读性极差。
*/

五、赋值运算符

赋值运算符最常见的就是 = 号,例如:

int age = 18;

复合赋值:

/*
+=
-=
*=
/=
%=
例如:
int a = 10;
a += 5;
就等价与:
a = a + 5;
*/

更多的例子:

a -= 3;

a *= 2;

a /= 5;

a %= 2;

注意:

short s = 1;

s += 1;

// 这个代码可以编译

但是:

short s = 1;

s = s + 1;

// 这个代码编译失败

原因:

/*

s + 1
结果提升为 int。

而:

+=
Java 自动进行了强制转换。

*/

六、关系(比较)运算符

用于比较两个值。结果一定是真或者假。

运算符含义
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于

示例:

int a = 10;
int b = 20;

System.out.println(a > b); // 输出 false

System.out.println(a < b); // 输出 true

System.out.println(a == b); // 输出 false

System.out.println(a != b); // 输出 true

七、== 与 = 的区别

这两个很多初学者都容易写错。= 表示赋值,==表示判断是否相等。
例如:

int a = 10;

int b = 20;

System.out.println(a == b);// 输出 false

八、逻辑运算符

逻辑运算符用于连接多个条件。

运算符含义
&&逻辑与
||逻辑或
!逻辑非

8.1 逻辑与

int age = 20;

if(age >=18 && age <=35){
    System.out.println("青年");
}

两个条件都必须成立。

8.2 逻辑或

if(score >=90 || rank <=10){
    System.out.println("优秀");
}

满足其中一个条件即可。

8.3 逻辑非

boolean flag = true;

System.out.println(!flag);// 输出 false

九、短路运算

9.1 &&

当左边的表达式为 false 时,右边的不会执行。

例如:

int a = 10;

if(a > 20 && ++a > 15){

}

System.out.println(a);

// 这里会输出 10,因为左边已经是false了,所以就不会执行右边了。

9.2 ||

当左边的表达式为 true 时,右边的不会执行。

例如:

int a = 10;

if(a <20 || ++a>20){

}

System.out.println(a);

// 这里会输出 10,因为左边已经是true了,所以就不会执行右边了。

十、位运算符

位运算主要用于底层开发、网络编程、算法优化等场景。

运算符作用
&按位与
|按位或
^按位异或
~按位取反
<<左移
>>右移
>>>无符号右移

示例:

10.1 按位与

System.out.println(5 & 3);

/*

二进制:
5 -> 0101

3 -> 0011

0101
0011    &

按位与的结果为:
0001

输出:1

运算规则:只要对应位有0,则当前位就是0
*/

10.2 按位或

System.out.println(5 | 3);

/*

二进制:
5 -> 0101

3 -> 0011

0101
0011    |

按位与的结果为:
0111

输出:7

运算规则:只要对应位有1,则当前位就是1
*/

10.3 按位异或

System.out.println(5 ^ 3);

/*

二进制:
5 -> 0101

3 -> 0011

0101
0011    ^

按位与的结果为:
0110

输出:6

运算规则:只要对应位不一样,则当前位就是1,即:相同为0,不同为1
*/

10.4 左移

System.out.println(11 << 1);

/*
二进制:
11 -> 0000 1011
0000 1011 << 1 表示左移一个比特位,单位是byte

向左移动,那么右边要补0,即: 0001 0110 -> 22
如果左移两位就是:0010 1100 -> 44
*/

10.5 右移

System.out.println(11 >> 1);

/*
二进制:
11 -> 0000 1011
0000 1011 >> 1 表示右移一个比特位,单位是byte

向右移动,那么左边边要补符号位,符号位为0就补0,符号位为1就补1,即: 0000 0101 -> 5
如果右移两位就是:0000 0010 -> 2
*/

十一、三元运算符

语法:

条件 ? 表达式1 : 表达式2
// 如果条件成立,就执行表达式1,否则就执行表达式2

例如:

int a = 10;
int b = 20;

int max = a > b ? a : b;

System.out.println(max);// 输出 20

多个判断:

String result = score >=60 ? "及格" : "不及格";

三元运算符可以简化简单的 if…else,但复杂逻辑仍建议使用 if…else,以保证代码可读性。

十二、运算符优先级

Java 运算符有固定的优先级。常见优先级(由高到低)如下:

优先级运算符
①()
②++、--、!
③*、/、%
④+、-
⑤<<、>>、>>>
⑥>、<、>=、<=
⑦==、!=
⑧&
⑨^
⑩|
⑪&&
⑫||
⑬?:
⑭=、+=、-= 等

💡建议:与其死记优先级,不如适当使用括号 (),既能避免歧义,也能提升代码可读性。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐