目录
- 前言
- 一、运算符和表达式
- 1.运算符
- 2.表达式
- 二、算术运算符
- 1.加法运算符
- 2.减法运算符
- 3.乘法运算符
- 4.除法运算符
- 5.取余运算符
- 6.表达式类型自动提升
- 总结
前言
本文主要介绍运算符和表达式,及运算符中的算术运算符。在 Java 编程中,运算符起着非常重要的作用,它们用于对数据进行操作和计算。运算符可以帮助我们进行数学运算、逻辑判断、赋值操作等,是编写复杂程序和表达式的基础。
一、运算符和表达式
1.运算符
运算符是一种用来执行特定操作的符号或符号组合。 在计算机编程中,运算符用于操作数(变量、常量或表达式)之间的运算,以产生一个结果。
常见的运算符包括:
- 算术运算符
- 赋值运算符
- 自增自减运算符
- 关系运算符
- 逻辑运算符
- 三元运算符
这只是一部分常见的运算符,不同的编程语言可能会有更多特定的运算符。在编程中,合理使用运算符可以实现各种复杂的计算和逻辑操作。
2.表达式
表达式是由操作数和运算符组成的代码结构,用于计算一个值。 表达式能够执行诸如数学运算、逻辑判断、变量赋值等各种计算操作。
int a = 10;
int b = 20;
int c = a + b;
在上述代码中,定义了 a
、b
变量,也就是操作数,在代码 int c = a + b;
中,+
号是运算符,并且是算术运算符,表示相加。那么 a+b
就是表达式,由于使用 +
号这个算术运算符,所以这个表达式叫做算术表达式。
Java 语言支持多种类型的表达式,包括算术表达式、关系表达式、逻辑表达式、赋值表达式等。
二、算术运算符
算术运算符用于执行基本的数学运算,Java 是支持所有的基本算术运算符的,包括加(+
)、减(-
)、乘(*
)、除(/
)、取余(%
)。
1.加法运算符
加法运算符(+
):用于执行加法运算,将两个操作数相加并返回结果。
public static void main(String[] args) {// 定义两个整型变量int a = 10;int b = 20;// 进行加法运算,结果为30int c = a + b;System.out.println(c);
}
+
号除了有加法运算功能外,还可以作为字符串的连接符。
public static void main(String[] args) {int a = 10;System.out.println("你的等级为:" + a);
}
运行结果为:
当加号(+
)的其中一个操作数是字符串时,Java 会自动将另一个操作数转换为字符串,然后执行字符串的连接操作。
2.减法运算符
减法运算符(-
):用于执行减法运算,将第一个操作数减去第二个操作数并返回结果。
public static void main(String[] args) {// 定义两个整型变量int a = 10;int b = 20;// 进行减法运算,结果为-10int c = a - b;System.out.println(c);
}
3.乘法运算符
乘法运算符(*
):用于执行乘法运算,将两个操作数相乘并返回结果。注意这里的乘法运算符是星号(*
),不是数学中的乘号(x
)。
public static void main(String[] args) {// 定义两个整型变量int a = 10;int b = 20;// 进行乘法运算,结果为200int c = a * b;System.out.println(c);
}
4.除法运算符
除法运算符(/
):用于执行除法运算,将第一个操作数除以第二个操作数并返回结果。要注意这里的除法运算符号是(/
),不是数学中的除号( ÷ \div ÷)。
还有几点需要注意:
- 当除法运算符的两个操作数都是整数类型,那么计算结果也是整数,这是结果值会直接截断,取整数部分。
- 当除法运算符的两个操作数有一个浮点类型,或两个都是浮点类型,则计算结果也是浮点类型,即整数带小数。
- 当除法运算符的两个操作都是整数类型,除数不可以为 0,程序运行报错:
/ by zero
- 当除法运算符的两个操作数有一个浮点类型,或两个都是浮点类型,除数可以是 0 或 0.0,计算结果为
Infinity
(无穷)。
public static void main(String[] args) {// 操作数都为整数类型int a = 3;int b = 2;int c = a / b;// 计算结果为1,只取整数部分,不进行四舍五入System.out.println(c);// 除数不能为0,否则运行报错java.lang.ArithmeticException: / by zero//System.out.println(a / 0);// 操作数至少有一个为浮点类型float x = 1.8f;float y = 0.7f;float z = x / y;// 计算结果有小数部分,但要注意浮点类型的精度System.out.println(z);// 结果为InfinitySystem.out.println(x / 0);
}
运行结果为:
5.取余运算符
取余运算符(%
):也叫取模运算符,用于执行取余运算,将第一个操作数除以第二个操作数并返回余数。
取余运算是在两个数相除得到的结果取余数部分,所以取余运算先要进行除法运算,那么除法中的注意事项在取余运算中同样生效,只不过当取余运算符的两个操作数有一个浮点类型,或两个都是浮点类型,除数可以是 0 或 0.0,计算结果为 NaN
(非数)。
public static void main(String[] args) {// 操作数都为整数类型int a = 3;int b = 2;int c = a % b;// 计算结果为1,只取余数部分System.out.println(c);// 除数不能为0,否则运行报错java.lang.ArithmeticException: / by zero//System.out.println(a % 0);// 操作数至少有一个为浮点类型float x = 1.8f;float y = 0.7f;float z = x % y;// 计算结果为小数,但要注意浮点类型的精度System.out.println(z);// 结果为NaNSystem.out.println(x % 0);
}
运行结果为:
6.表达式类型自动提升
在 Java 中,表达式类型自动提升是指在进行运算时,如果两个操作数具有不同的数据类型,Java 会根据一定的规则将其中一个操作数的类型转换为另一个操作数的类型,以便进行运算。
具体自动提升规则如下:
byte
、short
和char
类型提升为int
类型- 整个算术表达式的数据类型自动提升到表达式中最高等级操作数相同的类型,等级顺序为:
byte、short、char→int→long→float→double
如果两个操作数的类型不同,但它们都是整数类型,Java 会将它们都转换为更高精度的整数类型。例如,byte
和 int
相加时,byte
会被自动提升为 int
类型。
byte a = 5;
int b = 10;
int c = a + b; // byte类型的a会被自动提升为int类型
如果一个操作数是整数类型(byte
、short
、int
、long
),另一个操作数是浮点数类型(float
、double
),则整数类型会被自动提升为浮点数类型。这是因为浮点数类型的表示范围更广。
int a = 5;
double b = 3.14;
double result = a + b; // int类型的a会被自动提升为double类型
如果一个操作数是整数类型,另一个操作数是 char
类型,那么 char
类型会被自动提升为整数类型。
int a = 65;
char b = 'A';
int c = a + b; // char类型的b会被自动提升为int类型
需要注意的是,自动提升只是临时性地将操作数的类型提升为适合的类型用于计算,并不会改变操作数本身的类型。因此,如果需要将提升后的结果赋值给原始类型的变量,可能需要进行强制类型转换。
自动提升在 Java 中确保了在运算时数据的精度和范围不会丢失,同时提供了更灵活的表达式计算。
总结
运算符是一种用来执行特定操作的符号或符号组合。而表达式是由操作数和运算符组成的代码结构,用于计算一个值。注意表达式只能产生一个值。