运算符
目录运算符类型
- 算术运算符:用于基本的数学运算。
- 加(
+
) - 减(
-
) - 乘(
*
) - 除(
/
) - 模(
%
):求余数 - 自增(
++
):变量值加一 - 自减(
--
):变量值减一
- 加(
- 关系运算符:用于比较两个值,并根据比较结果返回布尔值
true
或false
。- 大于(
>
) - 小于(
<
) - 大于等于(
>=
) - 小于等于(
<=
) - 等于(
==
) - 不等于(
!=
)
- 大于(
- 逻辑运算符:用于布尔逻辑运算。
- 逻辑与(
&&
):两个条件都为true
时结果才为true
- 逻辑或(
||
):两个条件中至少有一个为true
结果就为true
- 逻辑非(
!
):反转布尔值,true
变false
,false
变true
- 逻辑与(
- 位运算符:直接对操作数的位执行操作。
- 位与(
&
) - 位或(
|
) - 位异或(
^
) - 位非(
~
):反转所有位 - 位左移(
<<
):向左移动位 - 位右移(
>>
):向右移动位,有符号 - 位无符号右移(
>>>
):向右移动位,无符号
- 位与(
- 赋值运算符:用于给变量赋值。
- 简单赋值(
=
) - 加等于(
+=
):加法和赋值的组合 - 减等于(
-=
):减法和赋值的组合 - 乘等于(
*=
):乘法和赋值的组合 - 除等于(
/=
):除法和赋值的组合 - 模等于(
%=
):求余数和赋值的组合 - 位与等于(
&=
) - 位或等于(
|=
) - 位异或等于(
^=
) - 位左移等于(
<<=
) - 位右移等于(
>>=
) - 位无符号右移等于(
>>>=
)
- 简单赋值(
- 条件运算符(三元运算符):基于条件执行操作,是
?:
的形式。- 格式:
condition ? value_if_true : value_if_false
- 格式:
- 成员访问运算符:用于访问对象的成员(方法和字段)。
.
:访问类或对象的成员
- 数组长度运算符:用于获取数组的长度。
.length
- 类型转换运算符:用于显式类型转换。
- (类型):将括号内的表达式转换为指定的类型
- 实例检查运算符:用于检查对象是否是特定类的实例。
instanceof
- 字符串连接运算符:用于连接字符串。
+
:当用于字符串和非字符串类型时,会将非字符串类型转换为字符串,然后进行连接。
i++与++i的区别
i++
(后缀递增运算符):
- 行为:
i++
首先返回变量i
的原始值,然后将i
的值增加 1。 - 使用场景:当你需要在表达式中使用变量的原始值,并且之后可以增加变量的值时。
++i
(前缀递增运算符):
- 行为:
++i
首先将变量i
的值增加 1,然后返回新的值。 - 使用场景:当你需要在表达式中使用变量的新值时。
代码示例:
int i = 5;
int a = i++; // a = 5, i = 6
int b = ++i; // i = 7, b = 7
System.out.println("a = " + a + ", i = " + i); // 输出 a = 5, i = 7
System.out.println("b = " + b + ", i = " + i); // 输出 b = 7, i = 7
区别总结:
- 返回值:
i++
返回递增前的值,而++i
返回递增后的值。 - 表达式求值:在表达式中,
i++
先使用原始值,再进行递增;++i
先进行递增,再使用新值。
&与&&的区别
- 逻辑与运算符
&
:&
是一个二元运算符,用于按位与(bitwise AND)操作。当它用于整数或字符等基本数据类型时,它会对两个数值的二进制位进行逐位与操作。- 它也可以用于布尔逻辑运算,但通常不推荐,因为
&
在布尔上下文中可能会产生副作用,并且容易与位运算混淆。
- 逻辑与运算符
&&
:&&
是一个短路与运算符,用于布尔逻辑运算。它用于连接两个布尔表达式,只有当两个操作数都为true
时,结果才为true
。&&
具有短路特性,即如果第一个操作数为false
,那么整个表达式的结果已经确定为false
,因此第二个操作数不会被求值。这可以防止不必要的计算和潜在的异常。
区别总结:
- 短路与非短路:
&&
具有短路特性,而&
不具有。 - 使用场景:
&
通常用于位运算,&&
用于布尔逻辑。 - 副作用:使用
&
进行布尔逻辑运算时,如果第一个操作数为false
,第二个操作数总是被求值,可能会产生副作用或异常。
|与||的区别
- 逻辑或运算符
||
:||
是一个二元运算符,用于布尔逻辑运算。- 它用于连接两个布尔表达式,如果至少有一个操作数为
true
,则整个表达式的结果为true
。 ||
具有短路特性,即如果第一个操作数为true
,那么整个表达式的结果已经确定为true
,因此第二个操作数不会被求值。这可以防止不必要的计算和潜在的异常。
- 按位或运算符
|
:|
是一个二元运算符,用于按位或(bitwise OR)操作。- 当它用于整数或字符等基本数据类型时,它会对两个数值的二进制位进行逐位或操作。
- 它也可以用于布尔逻辑运算,但通常不推荐,因为
|
在布尔上下文中可能会产生副作用,并且容易与位运算混淆。
区别总结:
- 短路与非短路:
||
具有短路特性,而|
不具有。 - 使用场景:
||
用于布尔逻辑运算,|
通常用于位运算。 - 副作用:使用
|
进行布尔逻辑运算时,如果第一个操作数为true
,第二个操作数总是被求值,可能会产生副作用或异常。
>与>>的区别
- 大于运算符
>
:>
是一个关系运算符,用于比较两个数值或对象。- 它返回一个布尔值(
true
或false
),表示左侧的值是否大于右侧的值。 - 这个运算符可以用于整数、浮点数、字符以及实现了
Comparable
接口的对象。
- 右移位运算符
>>
:>>
是一个按位运算符,用于将操作数的各个位向右移动指定的位数。- 它是二元运算符,需要两个操作数:一个是要被移位的数值,另一个是指定移动位数的数值。
- 右移位运算符有两种变体:带符号右移(
>>
)和无符号右移(>>>
)。
区别总结:
- 操作类型:
>
用于比较操作,返回布尔值;>>
用于按位操作,返回数值。 - 用途:
>
用于比较两个值的大小;>>
用于按位移动数值的位。 - 结果:
>
的结果是一个布尔值;>>
的结果是一个数值。