理解表达式求值和语句执行的原理与应用
表达式是Java程序的基本构建块,它由操作数和运算符组成,用于计算并产生一个值。理解表达式的求值规则对于编写正确和高效的Java程序至关重要。
a + b
、x > 5
int x = 10;
、System.out.println();
int a = 10, b = 3;
int sum = a + b; // 13
int difference = a - b; // 7
int product = a * b; // 30
int quotient = a / b; // 3
int remainder = a % b; // 1
int x = 5, y = 10;
boolean isEqual = (x == y); // false
boolean isNotEqual = (x != y); // true
boolean isGreater = (x > y); // false
boolean isLessEqual = (x <= y); // true
boolean a = true, b = false;
boolean and = a && b; // false
boolean or = a || b; // true
boolean not = !a; // false
// 短路求值
boolean result = (x > 0) && (y / x > 2);
运算符优先级决定了表达式中运算符的执行顺序。理解优先级规则有助于编写正确的表达式和避免逻辑错误。
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1(最高) | () [] . | 括号、数组访问、成员访问 | 左到右 |
2 | ++ -- + - ! ~ | 一元运算符 | 右到左 |
3 | * / % | 乘法、除法、取模 | 左到右 |
4 | + - | 加法、减法 | 左到右 |
5 | << >> >>> | 位移运算 | 左到右 |
6 | < <= > >= instanceof | 关系运算 | 左到右 |
7 | == != | 相等性比较 | 左到右 |
8 | & | 按位与 | 左到右 |
9 | ^ | 按位异或 | 左到右 |
10 | | | 按位或 | 左到右 |
11 | && | 逻辑与 | 左到右 |
12 | || | 逻辑或 | 左到右 |
13 | ? : | 三元条件运算符 | 右到左 |
14(最低) | = += -= *= /= %= | 赋值运算符 | 右到左 |
// 不使用括号(依赖优先级)
int result1 = 2 + 3 * 4; // 14 (先乘后加)
boolean flag1 = 5 > 3 && 2 < 4; // true (先比较后逻辑)
// 使用括号(明确顺序)
int result2 = (2 + 3) * 4; // 20
boolean flag2 = (5 > 3) && (2 < 4); // true (更清晰)
语句是Java程序的执行单元,用于执行特定的动作。Java中有多种类型的语句,每种都有其特定的用途和语法。
由表达式加分号组成,用于执行计算或方法调用。
// 赋值语句
int x = 10;
y += 5;
// 方法调用语句
System.out.println("Hello");
Math.sqrt(16);
// 自增自减语句
i++;
--count;
用于声明变量、常量或方法,定义程序的结构。
// 变量声明
int age;
String name = "张三";
// 常量声明
final double PI = 3.14159;
// 数组声明
int[] numbers = new int[10];
控制程序的执行流程,包括条件语句、循环语句等。
// 条件语句
if (x > 0) {
System.out.println("正数");
}
// 循环语句
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// 跳转语句
break;
continue;
return result;
通过一个表达式计算器的例子,我们来看看如何在实际项目中应用表达式和语句的知识。
public class ExpressionCalculator {
public static void main(String[] args) {
// 声明语句
double a = 10.5;
double b = 3.2;
double c = 2.0;
// 算术表达式
double sum = a + b + c; // 15.7
double average = sum / 3; // 5.233...
double complex = a * 2 + b * 3 - c; // 30.6
// 关系表达式
boolean isPositive = (average > 0); // true
boolean isEven = ((int)sum % 2 == 0); // false
// 逻辑表达式
boolean isValid = isPositive && (sum < 100); // true
// 条件表达式(三元运算符)
String result = isValid ? "有效" : "无效"; // "有效"
// 表达式语句(输出结果)
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("总和 = " + sum);
System.out.println("平均值 = " + average);
System.out.println("复合表达式结果 = " + complex);
System.out.println("结果验证:" + result);
}
}
int result = 7 / 3;
结果是 2,不是 2.33...double result = 7.0 / 3;
int i = 5; int j = ++i + i++;
结果可能不是预期的