在程序中经常出现一些特殊符号,如+、-、*、=、>等,这些特殊符号称作运算符。运算符用于对数据进行算术运算、赋值运算和比较运算等。在Java中,运算符可分为算术运算符、赋值运算符、比较运算符、逻辑运算符等。
算术运算符
在数学运算中最常见的就是加减乘除,被称作四则运算。Java中的算术运算符就是用来处理四则运算的符号,算术运算符是最简单、最常用的运算符号。
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b; | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(即算术中的求余数) | 7%5 | 2 |
++ | 自增(前) | a=2;b=++a; | a=3;b=3; |
++ | 自增(后) | a=2;b=a++; | a=3;b=2; |
-- | 自减(前) | a=2;b=--a | a=1;b=1; |
-- | 自减(后) | a=2;b=a-- | a=1;b=2; |
算术运算符在使用时需要注意的问题:
(1)在进行自增(++)和自减(--)运算时,如果运算符++或--放在操作数的前面,则先进行自增或自减运算,再进行其他运算。反之,如果运算符放在操作数的后面,则先进行其他运算再进行自增或自减运算。
(2)在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有小数参与,得到的结果会是一个小数。例如,2510/1000属于整数之间相除,会忽略小数部分,得到的结果是2,而2.5/10的结果为0.25。
(3)在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关。例如,(-5)%3=-2,而5%(-3)=2。
赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
运算符 | 运算 | 范例 | 结果 |
= | 赋值 | a=3;b=2; | a=3;b=2; |
+= | 加等于 | a=3;b=2;a+=b; | a=5;b=2; |
-= | 减等于 | a=3;b=2;a-=b; | a=1;b=2; |
*= | 乘等于 | a=3;b=2;a*=b; | a=6;b=2; |
/= | 除等于 | a=3;b=2;a/=b; | a=1;b=2; |
%= | 模等于 | a=3;b=2;a%=b; | a=1;b=2; |
赋值运算符使用时的注意事项。
(1)在Java中可以通过一条赋值语句对多个变量进行赋值,具体示例如下:
int x, y, z;
x = y = z = 5; // 为三个变量同时赋值
在上述代码中,一条赋值语句将变量x,y,z的值同时赋值为5。需要注意的是,下面的这种写法在Java中是不可以的。
int x = y = z = 5; // 这样写是错误的
(2)在表2-4中,除了“=”,其他的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,表达式首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可以此类推。
多学一招:复合赋值运算符--强制类型自动转换
在为变量赋值时,当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,需要进行强制类型转换。例如,将一个int类型的值赋给一个short类型的变量,需要进行强制类型转换。然而在使用+=、-=、*=、/=、%= 运算符进行赋值时,强制类型转换会自动完成,程序不需要做任何显式地声明。
比较运算符
比较运算符用于对两个数值或变量进行比较,比较运算结果是一个布尔值,即true或false。
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 3 | true |
注意:在比较运算中,不能将比较运算符“==”误写成赋值运算符“=”。
逻辑运算符
逻辑运算符用于对布尔型的数据进行操作,其结果仍是一个布尔值。
运算符 | 运算 | 范例 | 结果 |
& | 与 | true & true | true |
true & false | false | ||
false & false | false | ||
false &true | false | ||
| | 或 | true | true | true |
true | false | true | ||
false| false | false | ||
false| true | true | ||
^ | 异或 | true ^ true | false |
true ^ false | true | ||
false ^ false | false | ||
false ^ true | true | ||
! | 非 | !true | false |
!false | true | ||
&& | 短路与 | true && true | true |
true && false | false | ||
false && false | false | ||
false && true | false | ||
|| | 短路或 | true || true | true |
true || false | true | ||
false|| false | false | ||
false|| true | true |
使用逻辑运算符需要注意的问题。
(1)逻辑运算符可以针对结果为布尔值的表达式进行运算。例如,x > 3 && y != 0。
(2)运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。虽然运算符“&”和“&&”都表示与操作,但两者在使用上还有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。在使用“&&”进行运算,当左边为false时,右边的表达式就不再进行运算,因此“&&”被称作短路与。
(3)运算符“|”和“||”都表示或操作,当运算符两边的任一表达式值为true时,其结果为true。只有两边表达式的值都为false时,其结果才为false。同逻辑与操作类似,“||”运算符为短路或,当运算符“||”的左边为true时,右边的表达式不再进行运算。
(4)运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true或都为false),其结果为false。当两边表达式的布尔值不相同时,其结果为true。
位运算符
No. | 位运算符 | 描述 |
1 | & | 按位与 |
2 | | | 按位或 |
3 | ^ | 异或(相同为0,不同为1) |
4 | ~ | 取反 |
5 | << | 左移位 |
6 | >> | 右移位 |
7 | >>> | 无符号右移位 |
运算符的优先级
在对一些比较复杂的表达式进行运算时,要明确表达式中所有运算符参与运算的先后顺序,通常把这种顺序称作运算符的优先级。
优先级 | 运算符 |
1 | . [] () |
2 | ++ -- ~ ! (数据类型) |
3 | * / % |
4 | + - |
5 | << >> >>> |
6 | < > <= >= |
7 | == != |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | = *= /= %= += -= <<= >>= >>>= &= ^= |= |
在上表中,运算符前面的数字越小优先级越高。
【案例2-1】 商品入库
现要对华为和小米两种手机产品进行入库,本案例要求编写一个模拟商品入库的程序,可以在控制台输入入库商品的数量,最后打印出仓库中所有商品详细信息以及所有商品的总库存数和库存商品总金额。
商品信息如下: ● 品牌型号 ● 尺寸 ● 价格 ● 配置 ● 库存 ● 总价