Java 运算符
本文通过示例介绍 Java 的运算符,优先级顺序和他们的用法。我们还将尝试了解运算符的使用场景和运算结果。
本文通过示例介绍 Java 的运算符,优先级顺序和他们的用法。我们还将尝试了解运算符的使用场景和运算结果。
1.什么是运算符
运算符是对一个,两个或三个操作数执行特定类型的运算并产生结果的符号。运算符及其操作数的类型确定了对操作数执行的运算的类型以及产生的结果的类型。
1.1 Java 运算符的分类
Java 中的运算符可以基于两个条件进行分类:
- 操作数的数量 – 根据操作数的数量,运算符可以分为三中:一元,二元或三元运算符。如果一个运算符只需要一个操作数,则称为一元运算符;如果需要两个操作数,则称为二进制运算符;如果需要三个操作数,则称为三元运算符。
- 执行的操作类型 – 运算符对运算对象执行的运算类型,运算符分为算术运算符,关系运算符,逻辑运算符或位运算符,。
2. 赋值运算符(=)
- 赋值运算符(=)用于为变量赋值。
- 它是一个二进制运算符。它需要两个操作数。
- 右侧操作数的值已分配给左侧操作数。
- 左侧操作数必须是变量。
赋值运算符示例
//26 is the right-hand operand.
//counter is the left-hand operand, which is a variable of type int.
int counter = 26;
Java 确保赋值运算符的右侧操作数的值与左侧操作数的数据类型兼容。否则,将发生编译错误。对于引用变量,如果右侧操作数表示的对象与左侧变量类型不兼容,则会在编译源代码的时候出现运行时 ClassCastException
错误。
3.算术运算符
- 像
+
(加号),-
(减号),*
(乘数),/
(除数)之类的运算符在 Java 中称为算术运算符。 - 它只能与数字类型的操作数一起使用。这意味着,这两个操作数的算术运算符必须是
byte
,short
,char
,int
,long
,float
,和double
的其中一个类型 。 - 这些运算符不能对
boolean
基本类型和引用类型的操作数进行运算。
算术运算符示例
int sum = 10 + 20;
int difference = 50 - 20;
long area = 20l * 30l;
int percentage = 20 / 100;
3.1 一元算术运算符
操作员 | 描述 |
---|---|
+ |
一元正数运算符 ; 表示正值 |
- |
一元负数算子 ; 取反表达式值 |
++ |
增量运算符 ; 将值增加 1 |
-- |
递减运算符 ; 将值减 1 |
! |
逻辑反 ; 反转布尔值 |
3.2 二元算术运算符
| 操作员 | 描述 |
| +
| 加法 - 将运算符两侧的值相加 |
| -
| 减法 – 从左操作数中减去右操作数 |
| *
| 乘法 – 将运算符两侧的值相乘 |
| /
| 除法 – 将左操作数除以右操作数 |
| %
| 求模 – 将左操作数除以右操作数并返回余数 |
4. 字符串串联运算符(+)
运算符 +
操作在 Java 中被重载了。如果操作员用于执行多个功能,则称其为重载运算符。
4.1 连接两个字符串
到目前为止,您已经看到它用作算术加法运算符以将两个数字相加。它也可以用来连接两个字符串。
字符串串联示例
String str1 = "Hello";
String str2 = " World";
String str3 = str1 + str2; // Assigns "Hello World" to str3
3.2 将原始类型拼接到字符串
字符串连接运算符还用于将原始类型和字符串进行拼接。
字符串与原始连接
int num = 26;
String str1 = "Alphabets";
String str2 = num + str1; // Assigns "26Alphabets" to str2
4.2 串联 null
如果引用变量为 null
引用,则串联运算符将使用字符串 null
。
字符串连接为空
String str1 = "I am ";
String str2 = null;
String str3 = str1 + str2; // Assigns "I am null" to str3
5.关系运算符
- 所有关系运算符都是二元运算符。
- 他们作用于两个操作数。
- 关系运算符产生的结果始终是布尔值
true
或false
。 - 它们主要用于 Java 控制语句中,例如 if 语句,while 语句等。
下面让我们看看 Java 中所有可用的关系运算符。
操作员 | 描述 |
---|---|
== |
等于 – 检查两个操作数的值是否相等,如果是,则条件为 true 。 |
!= |
不等于 – 检查两个操作数的值是否相等,如果值不相等,则条件为 true 。 |
> |
大于 – 检查左操作数的值是否大于右操作数的值,如果是,则条件为 true 。 |
< |
小于 – 检查左操作数的值是否小于右操作数的值,如果是,则条件为 true 。 |
>= |
大于或等于 – 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为 true 。 |
<= |
小于或等于 – 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为 true 。 |
关系运算符示例
int result = 20;
if( result > 10) { //true
//some operation
}
boolean isEqual = ( 10 == 20 ); //false
6.布尔逻辑运算符
- 所有布尔逻辑运算符只能与布尔操作数一起使用。
- 它们通常用于控制语句中以比较两个(或多个)条件。
操作员 | 描述 |
---|---|
! |
如果操作数为 false ,则返回 true ;如果操作数为 true ,则返回 false 。 |
&& |
如果两个操作数都为 true ,则返回 true 。如果任一操作数为 false ,则返回 false 。 |
& |
如果两个操作数都为 true ,则返回 true 。如果任一操作数为 false ,则返回 false 。 |
` | |
` | ` |
^ |
如果其中一个操作数为 true ,则返回 true ,但两个不能都为 true 。如果两个操作数相同,则返回 false 。 |
&=; |
如果两个操作数都为 true ,则返回 true 。否则返回 false 。 |
` | =` |
^= |
如果两个操作数的求值均不同,即其中一个操作数为 true ,但不是两个都为真,则返回 true 。否则,它返回 false 。 |
布尔逻辑运算符示例
int result = 20;
if( result > 10 && result < 30) {
//some operation
}
if( result > 10 || result < 30) {
//some operation
}
&
与&&
唯一的不同在于&
会计算其右侧操作数,即使其左手操作数的计算结果为 false。|
与||
唯一的不同在于|
会计算其右侧操作数,即使其左手操作数的计算结果为 true。
7. 位运算符
按位运算符可操纵其操作数的各个位。Java 定义了几个按位运算符,它们可以应用于整数类型 long,int,short,char 和 byte。
操作员 | 描述 |
---|---|
& |
如果相对应位都是1,则结果为1,否则为0 |
` | ` |
^ |
如果相对应位值相同,则结果为0,否则为1 |
~ |
按位取反运算符翻转操作数的每一位,即0变成1,1变成0 |
<< |
按位左移运算符。左操作数按位左移右操作数指定的位数 |
>> |
按位右移运算符。左操作数按位右移右操作数指定的位数 |
>>> |
右移零填充运算符。左操作数的值向右移动右操作数指定的位数,并且移位后的值用零填充。 |
8.三元运算符
- Java 有一个条件运算符。它被称为三元运算符,因为它需要三个操作数。
?
和:
的两个符号 构成三元运算符。- 如果
boolean-expression
的计算结果为true
,则计算为true-expression
。否则,它将计算false-expression
。
8.1 语法
boolean-expression ? true-expression : false-expression
8.2 三元运算符示例
int number1 = 40;
int number2 = 20;
// 比较两个数,并返回大的那个数
int biggerNumber = (number1 > number2) ? number1 : number2;
9. Java 运算符的优先级表
当表达式具有多个运算符对表达式中的运算符求值时,Java 明确定义了优先计算的规则,用于指定的顺序。例如,乘法和除法的优先级高于加法和减法。
优先规则可以被显式括号覆盖。
当两个运算符共享一个操作数时,优先级较高的运算符优先。例如,1 + 2 * 3
等同于 1 + (2 * 3)
, 因为乘法的优先级高于加法。
在上面的表达式中,如果要先计算求和,请使用括号: (1 + 2) * 3
。