作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者。热爱技术、专注业务、开放合作、乐于分享,期待你我共同成长! 主打方向:Vue、SpringBoot、微信小程序
一、运算符是什么
运算符是提供计算功能的,如何编程语言都有自己的运算符,Java 语言也不例外,例如
、-
、*
、/
等。
大部分的运算符及其计算模式,同学们在小学、中学都已经学过,比如加减乘除的就没有必要再提。
同学们需要注意以下两点:
- 我们学过的运算符和 Java 语言的对应运算符,可能有变化。比如
/
为除法运算符,%
为取余运算符。 - 对于各种数学 / 物理公式,需要转换为 Java 编译器能够识别的形式。例如开根号的运算,需要写成
Math.sqrt(x)
。 - 等号
=
在 Java 中是赋值运算符,不再是相等的意思,赋值运算符的功能是将右边表达式的求值结果保存到左边的变量,比如x = 5
。
二、表达式和语句是什么?
运算符加上运算数形成的字符串就是表达式。
能够完成一条具体指令或操作的语法单位就是语句,语句一般以一个表达式加上分号 ;
形成。
三、算术运算符
算术运算符是能对各种整数、浮点数进行计算的运算符,如下表所示。
运算符 | 含义 | 样例 |
---|---|---|
| 加 | z = x y |
- | 减 | z = x - y |
* | 乘 | z = x * y |
/ | 除 | z = x / y |
% | 取模 | z = x % y |
| 递增 | x |
– | 递减 | x – |
= | 相加并赋值 | z = x |
-= | 相减并赋值 | z -= x |
*= | 相乘并赋值 | z *= x |
/= | 相除法并赋值 | z /= x |
%= | 取模并赋值 | z %= x |
- | 取负数 | z = -x |
同学们在学习算术运算符时,需要注意以下 5 点:
-
运算符既可以是单目运算符,也可以是双目运算符。- 当
/
运算符的两个运算数都是整数时,会自动变为整数取余,比如9 / 2 = 4
,而不是4.5
。 %
时取余运算符,不是百分比,如9 % 5 = 4
。--
是自加运算符和自减运算符,即单目运算符。如果放在变量前面是先递增再参与运算,如果放在变量后面则先参与运算再自增。=
是复合赋值运算符,可以同等转换为另外的运算符,可以理解为简写。
四、关系运算符
关系运算符是用来比较两个运算数的大小、判断是否相等,如下表所示。
运算符 | 含义 | 样例 |
---|---|---|
== | 等于 | x == y |
!= | 不等于 | x != y |
> | 大于 | x > y |
< | 小于 | x < y |
>= | 大于等于 | x >= y |
<= | 小于等于 | x <= y |
同学们在学习关系运算符时,需要注意以下 2 点:
- 以上关系运算符和日常生活中用到的有不同之处,比如
==
,判断相等用==
而不是=
。 - 关系表达式的计算结果是逻辑值,也就是
true
或false
。
五、逻辑运算符
逻辑运算符是用来做命题运算,Java 中的逻辑运算符如下表所示。
运算符 | 含义 | 样例 |
---|---|---|
& | 逻辑与 | x & y |
| | 逻辑或 | x | y |
^ | 逻辑异或 | x ^ y |
! | 逻辑非 | ! x |
|| | 短路或 | x || y |
&& | 短路与 | x && y |
同学们在学习逻辑运算符时,需要注意以下 5 点:
&
为逻辑与运算符,是 并且 的意思,如果两个条件都成立则成立,否则不成立。|
为逻辑或运算符,是 或者 的意思,如果两个条件有一个成立则成立,如果都不成立则结果为不成立。^
为逻辑异或运算符,参与运算的两个命题必须相异,如果两个条件相互不一样则成立,否则不成立。!
为逻辑非运算符,是单目运算符,可以将true
改为false
,或者将false
改为true
。&&
和||
是短路与、短路或运算符,通常用于复杂表达式的求值。同学们需要注意,如果前者命题已经将结果确定,则不进行后者命题的判断。比如3 > 6 && 99 > 77
表达式,已知前者子表达式不满足,就不再对99 > 77
进行判断,这也是考试经常考察的知识点。
六、位运算符
位运算符是将常量或变量,以二进制的方式,按位进行逻辑运算或移位计算,通常将 0
看为 false
,将 1
看为 true
,如下表所示。
运算符 | 含义 | 样例 |
---|---|---|
~ | 按位非 | z = ~ x |
& | 按位与 | z = x & y |
| | 按位或 | z = x | y |
^ | 按位异或 | z = x ^ y |
>> | 右移 | z = x >> 2 |
>>> | 前补 0 右移 | z = x >>> 2 |
<< | 左移 | z = x << 2 |
同学们在学习位运算符时,需要注意以下 4 点:
~
运算符是按位进行取反,比如12
转为二进制为1100
,逐位取反后为0011
,即~ 12
等于3
。&
按位进行与运算,如下所示。
10101
&01110
------
00100
|
按位进行或运算,如下所示。
10101
|01110
------
11111
^
按位进行异或运算,如下所示。
10101
^01110
------
11011
七、其他运算符
除了上述运算符之外,还有三类其他运算符,分别为条件运算符、instanceof 运算符 和 字符串连接运算符。
7.1 条件运算符
条件运算符的格式如下:
条件表达式 ? 表达式 1 : 表达式 2
如果条件表达式的值为 true
,则取表达式 1 的值,否则取表达式 2 的值。
比如判断学生成绩等级,设学生成绩为 X。
X >= 60 ? “合格” : “不合格”
7.2 instanceof 运算符
instanceof 运算符用于测试某一实例对象是否属于指定类型,返回布尔值。
实例对象 instanceof 类名 / 接口名
提示:关于类和接口的知识将在后续课时中阐述,你只需要了解有 instanceof 这个运算符即可。
7.3 字符串连接运算符
使用字符串连接运算符可以将多个连接符连接起来。
如果一个字符串和非字符串进行
运算,Java 会自动将其他类型转换为字符串,如下所示。
public class Main {
private static final int MAX_SIZE = 10;
public static void main(String[] args) {
System.out.println("aa" "bb");
System.out.println("1" 9);
System.out.println(9 "1");
System.out.println(9 1 "1");
System.out.println(9 "1" 1);
}
}
输出结果如下:
代码语言:javascript复制aabb
19
91
101
911
八、运算符优先级
在含有多个运算符的表达式中,这些运算符按照一定的优先级进行运算。
在 Java 中,单目运算符优先级高于多目运算符;算数运算符优先级高于关系运算符;关系运算符优先级高于逻辑运算符;逻辑运算符优先级高于赋值运算符。
总体优先级如下所示,优先级值越小越优先,同等级则按照从左往右的顺序执行。
- 优先级 1:圆括号、下标运算符、点运算符
- 优先级 2:逻辑非运算符、按位取反、自增、自减、负号、类型转换
- 优先级 3:乘法、触发、取余
- 优先级 4:加法、减法
- 优先级 5:左移、右移运算符
- 优先级 6:关系运算符
- 优先级 7:等于、不等于
- 优先级 8:逻辑与或、逻辑异或、逻辑或、按位与、按位异或、按位或
- 优先级 9:短路与、短路或
- 优先级 10:条件运算符
- 优先级 11:对象实例判断
- 优先级 12: 赋值运算符、符合赋值运算符
九、课时总结
在本课时中,首先接触了 Java 运算符、表达式和语句的基本概念,接着依次学习了算数运算符、关系运算符、逻辑运算符、位运算符、条件运算符等知识,最后总结了多类运算符的优先级顺序。在下节课时将讲解 Java 注释的使用方式。