运算符
Java中的运算符是用于执行各种操作的符号,它们可以对常量或变量进行运算,并产生结果。运算符按功能可分为以下几大类:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、三元运算符以及类型比较运算符。
算术运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。
| 运算符 | 作用 | 示例 |
|---|---|---|
+ |
加法、字符串连接 | a + b |
- |
减法 | a - b |
* |
乘法 | a * b |
/ |
除法 | a / b |
% |
取模(求余数) | a % b |
++ |
自增(前置/后置) | ++a 或 a++ |
-- |
自减(前置/后置) | --a 或 a-- |
java
int a = 10, b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3(整数除法,结果取整)
System.out.println(a % b); // 1(余数)
// 自增自减
int x = 5;
System.out.println(++x); // 6(先加1再使用)
System.out.println(x++); // 6(先使用再加1,此时x变为7)
关系运算符
| 运算符 | 作用 | 示例 |
|---|---|---|
== |
等于 | a == b |
!= |
不等于 | a != b |
> |
大于 | a > b |
< |
小于 | a < b |
>= |
大于等于 | a >= b |
<= |
小于等于 | a <= b |
java
int a = 10, b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a < b); // true
位运算符
| 运算符 | 作用 | 示例 |
|---|---|---|
== |
等于 | a == b |
!= |
不等于 | a != b |
> |
大于 | a > b |
< |
小于 | a < b |
>= |
大于等于 | a >= b |
<= |
小于等于 | a <= b |
java
int a = 5; // 二进制 0101
int b = 3; // 二进制 0011
System.out.println(a & b); // 1 (0001)
System.out.println(a | b); // 7 (0111)
System.out.println(a ^ b); // 6 (0110)
System.out.println(~a); // -6(补码表示)
System.out.println(a << 1); // 10 (1010) 左移1位相当于乘2
System.out.println(a >> 1); // 2 (0010) 右移1位相当于除2取整
逻辑运算符
| 运算符 | 作用 | 示例 |
|---|---|---|
&& |
短路与 | (a>b) && (c<d) |
| ` | ` | |
! |
逻辑非 | !flag |
java
boolean t = true, f = false;
System.out.println(t && f); // false
System.out.println(t || f); // true
System.out.println(!t); // false
// 短路效应
int a = 5, b = 0;
if (b != 0 && a / b > 1) { // 不会触发除零异常,因为b!=0为false,右侧不执行
System.out.println("OK");
}
赋值运算符
| 运算符 | 作用 | 示例 |
|---|---|---|
= |
简单赋值 | a = b |
+= |
加后赋值 | a += b |
-= |
减后赋值 | a -= b |
*= |
乘后赋值 | a *= b |
/= |
除后赋值 | a /= b |
%= |
取模后赋值 | a %= b |
&= |
按位与后赋值 | a &= b |
| ` | =` | 按位或后赋值 |
^= |
按位异或后赋值 | a ^= b |
<<= |
左移后赋值 | a <<= b |
>>= |
右移后赋值 | a >>= b |
>>>= |
无符号右移后赋值 | a >>>= b |
java
int a = 10, b = 5;
a += b; // 相当于 a = a + b; a变为15
a *= 2; // a = 30
System.out.println(a); // 30
三元运算符
根据布尔值表达式返回两个值之一
语法:条件 ? 表达式1 : 表达式2
java
int age = 20;
String status = (age >= 18) ? "成年" : "未成年";
System.out.println(status); // 成年
使用场景:简单的条件赋值,替代简短的if-else
instanceof 运算符
判断对象是否为某个类(或其子类)的实例。
java
String str = "Hello";
boolean result = str instanceof String; // true
boolean result2 = str instanceof Object; // true(String继承自Object)
使用场景:类型安全检查。
循环结构
1.for循环
先执行初始化语句(仅一次),然后判断布尔表达式,如果为true则执行循环体,接着执行更新语句,再次判断表达式,如此反复,直到表达式为false时退出循环。
java
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
2.while循环
先判断布尔表达式,如果为true则执行循环体,然后再次判断,直到表达式为false。可能一次都不执行(如果一开始条件就不成立)。
java
int sum = 0, i = 1;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("总和:" + sum);
3.do-while循环
先执行一次循环体,再判断布尔表达式,如果为true则继续下一次循环,否则退出。至少执行一次。
java
Scanner scanner = new Scanner(System.in);
int password;
do {
System.out.print("请输入密码:");
password = scanner.nextInt();
} while (password != 123456);
System.out.println("密码正确!");
//让用户输入密码,知道输入正确为止