章
目
录
了解可用的Java 运算符和优先顺序,并通过示例了解它们的用法。我们还将尝试了解何时使用哪个运算符以及预期的结果是什么。
1.Java运算符
运算符是对一个、两个或三个操作数执行特定运算并产生结果的符号。运算符及其操作数的类型决定了对操作数执行的操作类型以及生成的结果类型。
Java 中的运算符可以根据两个标准进行分类:
- 操作数的数量– 根据操作数的数量,运算符分为三种类型。根据操作数的数量,运算符被称为一元、二元或三元运算符。如果一个运算符只有一个操作数,则称为一元运算符;如果需要两个操作数,则称为二元运算符;如果需要三个操作数,则称为三元运算符。
- 它们执行的操作类型– 运算符称为算术运算符、关系运算符、逻辑运算符或按位运算符,具体取决于它对其操作数执行的运算类型。
操作符 | 描述 |
---|---|
+ – * / | 一元或二元算术运算符 |
++ — | 自增和自减一元运算符 |
==!= | 相等运算符 |
< > <= => | 关系运算符 |
!& | | 逻辑运算符 |
&& || ?: | 条件运算符 |
= += -= *= /= %= | 赋值运算符 |
&= |= ^= <<= >>= >>>= | 赋值运算符 |
& | 〜^<<>>>>> | 按位运算符 |
-> :: | 箭头和方法引用运算符 |
new | 实例创建运算符 |
instanceOf | 类型判断运算符 |
+ | 字符串连接运算符 |
让我们通过示例了解一些最常用的运算符。关于<<(左移)、>>(右移)和>>>(无符号右移)请参考这篇文章:《Java中的位运算符:<<、>>和>>>详解》
赋值运算符
- 赋值运算符 (=) 用于为变量赋值。
- 它是一个二元运算符。它需要两个操作数。
- 右侧操作数的值被分配给左侧操作数。
- 左侧操作数必须是变量。
//26 是右侧操作数。
//counter是左操作数,是int类型的变量。
int counter = 26;
Java 确保赋值运算符右侧操作数的值与左侧操作数的数据类型兼容。否则,会发生编译时错误。
ClassCastException
对于引用变量,如果右侧操作数表示的对象与作为左侧操作数的引用变量的赋值不兼容,您可能能够编译源代码并收到运行时错误。
算术运算符
- ( + (加)、– (减)、* (乘)、/ (除))等运算符在 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;
<h3″>一元算术运算符
操作符 | 描述 |
---|---|
'+' |
一元加运算符;表示正值(但是,如果没有这个,数字就是正值) |
'-' |
一元减运算符;对表达式值求反 |
'++' |
自增运算符;将值增加 1 |
'--' |
自减运算符;将值减 1 |
'!' |
取反运算符;反转布尔值 |
二元算术运算符
操作符 | 描述 |
---|---|
'+' |
加法– 将运算符两侧的值相加 |
'-' |
减法– 从左手操作数中减去右手操作数 |
'*' |
乘法– 将运算符两侧的值相乘 |
'/' |
除法– 将左手操作数除以右手操作数 |
'%' |
模数– 将左侧操作数除以右侧操作数并返回余数 |
字符串连接运算符
Java 中该'+'
运算符是重载的。如果一个操作符用于执行多个功能,则该操作符被称为重载。
连接两个字符串
到目前为止,您已经看到它作为算术加法运算符来添加两个数字。它还可用于连接两个字符串。
String str1 = "Hello";
String str2 = " World";
String str3 = str1 + str2; // 将 "Hello World" 赋值给 str3
将原始类型连接到字符串
字符串连接运算符还用于将基元和引用数据类型值连接到字符串。
int num = 26;
String str1 = "Alphabets";
String str2 = num + str1; // 将"26Alphabets" 赋值给 str2
连接空值
如果引用变量包含“ null ”引用,则串联运算符将使用字符串“null”。
String str1 = "I am ";
String str2 = null;
String str3 = str1 + str2; // 将"I am null" 赋值给 str3
<h2″>关系运算符
- 所有关系运算符都是二元运算符。
- 他们接受两个操作数。
- 关系运算符产生的结果始终是布尔值
true
或false
。 - 它们主要用于Java控制语句,例如if语句、while语句等。
下面让我们看看 java 中所有可用的关系运算符。
操作符 | 描述 |
---|---|
'==' |
等于– 检查两个操作数的值是否相等,如果相等则条件为真。 |
'!=' |
不等于– 检查两个操作数的值是否相等,如果值不相等,则条件成立。 |
'>' |
大于– 检查左操作数的值是否大于右操作数的值,如果是,则条件为真。 |
'<' |
小于– 检查左操作数的值是否小于右操作数的值,如果是,则条件为真。 |
'>=' |
大于或等于– 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真。 |
'<=' |
小于或等于– 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真。 |
int result = 20;
if( result > 10) { //true
//some operation
}
boolean isEqual = ( 10 == 20 ); //false
<h2″>布尔逻辑运算符
- 所有布尔逻辑运算符只能与布尔操作数一起使用。
- 它们主要用于控制语句中来比较两个(或多个)条件。
操作符 | 描述 |
---|---|
'!' |
如果操作数为假,则返回 true;如果操作数为 true,则返回 false。 |
'&&' |
如果两个操作数都为 true,则返回 true。如果任一操作数为 false,则返回 false。 |
'&' |
如果两个操作数都为 true,则返回 true。如果任一操作数为 false,则返回 false。 |
'||' |
如果任一操作数为 true,则返回 true。如果两个操作数都为假,则返回假。 |
'|' |
如果任一操作数为 true,则返回 true。如果两个操作数都为假,则返回假。 |
'^' |
如果其中一个操作数为 true,则返回 true,但不能同时为 true。如果两个操作数相同,则返回 false。 |
'&=;' |
如果两个操作数的计算结果均为 true,则 &= 返回 true。否则,返回 false。 |
'|=' |
如果任一操作数的计算结果为 true,则 != 返回 true。否则,返回 false。 |
'^=' |
如果两个操作数的计算结果为不同的值,即其中一个操作数为 true 但不是两者都为 true,则 ^= 返回 true。否则,返回 false。 |
int result = 20;
if( result > 10 && result < 30) {
//some operation
}
if( result > 10 || result < 30) {
//some operation
}
- 逻辑AND 运算符( & ) 的工作方式与逻辑短路 AND 运算符 ( && ) 相同,但有一点不同。逻辑与运算符 (&) 计算其右侧操作数,即使其左侧操作数的计算结果为 false。
- 逻辑“或”运算符的工作方式与逻辑短路“或”运算符相同,但有一点不同。即使其左侧操作数的计算结果为 true,逻辑 OR 运算符也会计算其右侧操作数。
<h2″>按位运算符
按位运算符操作其操作数的各个位。Java 定义了几个位运算符,可应用于整数类型long、int、Short、char和byte。
操作员 | 描述 |
---|---|
'&' |
如果两个操作数中都存在,则二进制 AND 运算符会将一位复制到结果中。 |
'|' |
如果任一操作数中存在该位,则二元或运算符会复制该位。 |
'^' |
如果在一个操作数中设置了该位,但不是在两个操作数中都设置了该位,则二进制 XOR 运算符会复制该位。 |
'~' |
二进制补码运算符是一元的,具有“翻转”位的效果。 |
<< |
二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 |
>> |
二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 |
>>> |
右移补零运算符。左操作数的值向右移动右操作数指定的位数,并用零填充移位后的值。 |
三元运算符
- Java 有一个条件运算符。它被称为三元运算符,因为它需要三个操作数。
- “?”两个符号 和“:”构成三元运算符。
- 如果 boolean-expression 的计算结果为true,则它计算true-expression;否则,它会评估 false-expression。
//语法
boolean-expression ? true-expression : false-expression
// 示例
int number1 = 40;
int number2 = 20;
//比较两个数并返回哪个较大
int biggerNumber = (number1 > number2) ? number1 : number2;
<h2″>运算符优先级表
Java 有明确定义的规则,用于指定当表达式有多个运算符时表达式中运算符的求值顺序。例如,乘法和除法的优先级高于加法和减法。
优先规则可以被显式括号覆盖。
当两个运算符共享一个操作数时,优先级较高的运算符先执行。例如,1 + 2 * 3
被视为1 + (2 * 3)
因为乘法的优先级高于加法。
在上面的表达式中,如果您想先添加值,请使用显式括号,如下所示 – (1 + 2) * 3
。
优先级从高到低如下表:
优先级 | 操作符 | 类型 | 关联性 |
---|---|---|---|
15 | () [] · |
括号 数组下标 成员选择 |
左到右 |
14 | ++ — |
一元后自增 一元后自减 |
右到左 |
13 | ++ —— + —— ! 〜 (类型) |
一元预增 一元预减 一元加 一元 减 一元逻辑非 一元按位补 一元类型转换 |
右到左 |
12 | * / % |
乘法除法 模 数 |
左到右 |
11 | + – |
加减 法 |
左到右 |
10 | << >>>>> _ |
按位左移 带符号扩展的 按位右移 带零扩展的按位右移 |
左到右 |
9 | << = >> = instanceof |
关系小于 关系小于或等于 关系大于 关系大于或等于 类型比较(仅限对象) |
左到右 |
8 | == != |
关系等于 关系不等于 |
左到右 |
7 | & | 按位与 | 左到右 |
6 | ^ | 按位异或 | 左到右 |
5 | | | 按位或 | 左到右 |
4 | && | 逻辑与 | 左到右 |
3 | || | 逻辑或 | 左到右 |
2 | ?: | 三元条件 | 右到左 |
1 | = += -= *= /= %= |
赋值 加法赋值 减法赋值 乘法赋值 除法赋值 模赋值 |
右到左 |
这就是java中运算符的全部内容。
文章目录前言 第1章 Java语言基础 第2章 流程控制语句 第3章 面向对象编程 第4章 Java 字符串 […]