计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:
操作符 | 描述 |
---|---|
+ | 相加运算符两侧的值 |
- | 左操作数减去右操作数 |
* | 相乘操作符两侧的值 |
/ | 左操作数除以右操作数 |
% | 左操作数除以右操作数的余数(计算公式:a-a/b*b )(当a是一个小数时,公式:a-(int)a/b*b ) |
++ | 操作数的值增加1 |
– | 操作数的值减少1 |
前缀自增自减法(++a,--a
): 先进行自增或者自减运算,再进行表达式运算
后缀自增自减法(a++,a--
): 先进行表达式运算,再进行自增或者自减运算
示例:
// 自增自减运算符
int a = 10;
int b = 20;
int c = a++;
int d = ++b;
System.out.println(c);
System.out.println(d);
----------------------------
输出:
10
21
面试真题:
1.阅读以下代码,该代码将输出什么?
int i = 1;
i = i++;
System.out.println(i);
-----------------------------
输出:
1
原因:规则使用临时变量,temp = i; i = i + 1; i = temp;
导致i的值还是1
2.阅读以下代码,该代码将输出什么?
int j = 1;
j = ++j;
System.out.println(j);
-------------------------
输出:
2
运算符 | 描述 |
---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真 |
操作符 | 描述 |
---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真 |
ll | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false |
真值表:
有时代码中会出现非短路逻辑运算符的写法(单个
&或|
),他们的区别是:如果第一个操作数已经可以判断结果,那么短路逻辑运算符将跳过第二个操作数,而非短路逻辑运算符则不会跳过,效率较低😁
下面是Java语言支持的赋值运算符:
操作符 | 描述 |
---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 |
+= | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 |
-= | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 |
*= | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 |
/= | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 |
<<= | 左移位赋值运算符 |
>>= | 右移位赋值运算符 |
&= | 按位与赋值运算符 |
^= | 按位异或赋值操作符 |
l= | 按位或赋值操作符 |
示例:
// 赋值运算符
int k = 1;
int l = 2;
k += l;
System.out.println(k);
---------------------
输出:
3
复合赋值运算符底层会进行一个强制的类型转换,所以以下代码是正确的:
byte m = 1;
m += 2;
System.out.println(m);
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
variable x = (expression) ? value if true : value if false
示例:
// 三元运算符
int n , o;
n = 10;
// 如果 n 等于 1 成立,则设置 o 为 20,否则为 30
o = (n == 1) ? 20 : 30;
System.out.println( "Value of o is : " + o );
-------------------------------
输出:
Value of o is : 30
底层其实是
if-else
语句
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。