2.7 运算符
2.7.1 算术运算符
表 Java算术运算符
运算符 | 描述 | 例子 |
---|---|---|
+ | 加法 | A + B 结果为 30 |
- | 减法 | A - B 结果为 -10 |
* | 乘法 | A * B 结果为 200 |
/ | 除法 | B / A 结果为 2 |
% | 取余 | B % A 结果为 0 |
++ | 自增 | A++ 或 ++A 结果为 11 |
-- | 自减 | A-- 或 --A 结果为 9 |
下面举例说明算术运算符的使用。
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 25;
int d = 25;
int d;//在成员变量中默认值为0;在局部变量中必须初始化
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("c % a = " + (c % a) );
System.out.println("a++ = " + (a++) );
System.out.println("++a = " + (++a) );
System.out.println("a-- = " + (a--) );
System.out.println("--a = " + (--a) );
System.out.println("b--+d = " + (b--+d) );
System.out.println("--b+d = " + (--b+d) );
}
}
输出:
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++ = 10
++a = 12
a-- = 12
--a = 10
b--+d = 20
--b+d = 18
2.7.2 关系运算符
表 Java关系运算符
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (a == b) 为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (a != b) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (a > b) 为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (a < b) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (a >= b) 为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (a <= b) 为真。 |
下面举例说明关系运算符的使用。
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
}
}
输出:
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
2.7.3 逻辑运算符和位运算符
1.逻辑运算符
表 Java逻辑运算符
运算符 | 描述 | 例子 |
---|---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B) 为假。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个操作数为真,条件为真。 | (A || B) 为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为真,则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
下面举例说明逻辑运算符的使用。 |
public class Test {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a && b));
System.out.println("a || b = " + (a || b));
System.out.println("!a = " + !a);
}
}
输出:
a && b = false
a || b = true
!a = false
2.位运算符
位运算符用来对二进制位进行操作,~、&、|、^ 是单目运算符,其余都是双目运算符。
(1)移位运算
表 Java 移位运算符
运算符 | 描述 | 例子 A=9 |
---|---|---|
<< | 按位左移运算符。左操作数的值向左移动右操作数指定的位数。 | A << 2得到 40,即 00001010,向左移动 2 位得到 00101000。 |
>> | 按位右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2得到 2,即 00000010,向右移动 2 位得到 00000001。 |
>>> | 按位右移补零操作符。左操作数的值向右移动右操作数指定的位数,高位补零。 | A >>> 2得到 2,即 00000010,向右移动 2 位得到 00000001。 |
下面举例说明移位运算符的使用。
public class Test {
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
System.out.println("a << 2 = " + (a << 2) );
System.out.println("a >> 2 = " + (a >> 2) );
System.out.println("a >>> 2 = " + (a >>> 2) );
}
}
输出:
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
(2)按位运算符
表 Java 按位运算符
运算符 | 描述 | 例子A=60,B=13 |
---|---|---|
& | 如果两个相应的位都为1,则该位的结果为1,否则为0。 | (A & B) 结果为 12,即 0000 1100 |
| | 如果两个相应的位都为0,则该位的结果为0,否则为1。 | (A | B) 结果为 61,即 0011 1101 |
^ | 如果两个相应的位值相同,则该位的结果为0,否则为1。 | (A ^ B) 结果为 49,即 0011 0001 |
~ | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (~A ) 结果为 -61,即 1100 0011,在二进制补码形式中。 |
下面举例说明按位运算符的使用。
public class Test {
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
System.out.println("a & b = " + (a & b) );// 12 = 0000 1100
System.out.println("a | b = " + (a | b) );// 61 = 0011 1101
System.out.println("a ^ b = " + (a ^ b) );// 49 = 0011 0001
System.out.println("~a = " + ~a );// -61 = 1100 0011
}
}
输出:
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
2.7.4 赋值运算符和条件运算符
1.赋值运算符
赋值运算符用于为变量赋值。Java 语言中提供的赋值运算符有以下几种:
运算符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右边的操作数的值赋给左边的操作数 | C = A + B 将 A + B 的值赋给 C |
+= | 加和赋值操作符,它把右操作数加上左操作数的结果赋值给左操作数 | C += A 等价于 C = C + A |
-= | 减和赋值操作符,它把左操作数减去右操作数的结果赋值给左操作数 | C -= A 等价于 C = C - A |
*= | 乘和赋值操作符,它把左操作数乘以右操作数的结果赋值给左操作数 | C *= A 等价于 C = C * A |
/= | 除和赋值操作符,它把左操作数除以右操作数的结果赋值给左操作数 | C /= A,C 等于 C / A |
%= | 求模和赋值操作符,它把左操作数除以右操作数的余数赋值给左操作数 | C %= A 等价于 C = C % A |
<<= | 左移位赋值运算符 | C <<= 2 等价于 C = C << 2 |
>>= | 右移位赋值运算符 | C >>= 2 等价于 C = C >> 2 |
>>>= | 无符号右移位赋值运算符 | C >>>= 2 等价于 C = C >>> 2 |
&= | 按位与赋值运算符 | C &= 2 等价于 C = C & 2 |
^= | 按位异或赋值操作符 | C ^= 2 等价于 C = C ^ 2 |
|= | 按位或赋值操作符 | C |= 2 等价于 C = C | 2 |
下面举例说明赋值运算符的使用。
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 25;
int d = 25;
a = b + c;
System.out.println("a = " + a );
b += c;
System.out.println("b = " + b );
a -= b;
System.out.println("a = " + a );
a *= b;
System.out.println("a = " + a );
a /= c;
System.out.println("a = " + a );
a %= d;
System.out.println("a = " + a );
a <<= 2;
System.out.println("a = " + a );
a >>= 2;
System.out.println("a = " + a );
a >>>= 2;
System.out.println("a = " + a );
}
}
输出:
a = 35
b = 45
a = -10
a = -450
a = -10
a = 0
a = 0
a = 0
a = 0
2.条件运算符
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的语法如下:
variable x = (expression) ? value if true : value if false
下面举例说明条件运算符的使用。
public class Test {
public static void main(String[] args) {
int a , b;
a = 10;
b = (a == 1) ? 20: 30;
System.out.println( "Value of b is : " + b );
b = (a == 10) ? 20: 30;
System.out.println( "Value of b is : " + b );
}
}
输出:
Value of b is : 30
Value of b is : 20
2.7.5 运算符优先级
运算符优先级确定了解释表达式的方式。这就像在数学中一样,数学中有优先级规则来决定先执行除法还是先执行乘法。在 Java 中,表达式也可以根据运算符的优先级来确定执行顺序。例如,乘法运算符的优先级高于加法运算符,这表示乘法运算符会先于加法运算符被计算。
下面是运算符优先级的完整列表,具有最高优先级的运算符在表的最上面,最低优先级的在表的最下面。同一行中的两个运算符具有相同的优先级。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr-- | 右到左 |
一元 | ++expr --expr + - ~ ! | 右到左 |
类型转换 | (type) | 右到左 |
乘性 | * / % | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等性 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | || | 左到右 |
条件 | ? : | 右到左 |
赋值 | = += -= *= /= %= &= ^= |= <<= >>= >>>= | 右到左 |
逗号 | , | 左到右 |
2.8 案例:银行智能取款
2.8.1 需求分析
银行智能取款机,需要实现以下功能:
- 获取用户输入的取款金额
- 判断取款金额是否合法(大于0,小于等于余额)
- 输出取款后的余额
2.8.2 设计思路
- 定义一个变量balance,表示余额,初始值为8888
- 使用Scanner类获取用户输入的取款金额
- 判断取款金额是否合法,如果不合法,输出提示信息并结束程序
- 计算取款后的余额,并输出
2.8.3 代码实现
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
double balance = 8888.0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入取款金额:");
double amount = scanner.nextDouble();
if (amount <= 0 || amount > balance) {
System.out.println("取款金额不合法!");
return;
}
balance -= amount;
}
System.out.println("取款成功,当前余额为:" + balance);
}
}
独学而无友,则孤陋而寡闻。