表达式有结果,语句有动作;表达式产生值(如5+3*2返回11),语句执行操作(如if、for以分号结尾或成块);赋值表达式x=42本身有值,而赋值语句count=10;无返回值。

Java中,表达式是能计算出一个具体值的代码片段;语句则是执行某个操作的完整指令。最直观的区别在于:表达式有结果,语句有动作。
表达式的核心特征
表达式由变量、字面量、运算符、方法调用等组成,最终一定产生一个值,类型可以是 int、boolean、String 等任意合法类型。
-
算术表达式:如
5 + 3 * 2,结果是11 -
比较表达式:如
a != b,结果是true或false -
赋值表达式:如
x = 42,本身也返回值(这里是42),所以可嵌套使用:y = (x = 42) -
方法调用表达式:如
Math.max(8, 12)返回12,list.size()返回整数 -
字符串拼接表达式:如
"Hello" + name返回一个新的字符串对象
语句的核心特征
语句是程序执行的基本单位,用来完成声明、赋值、流程控制等任务,以分号 ; 结尾(除复合语句如 if、for、while 等外)。
-
声明语句:如
int count;—— 定义变量,不产生值 -
赋值语句:如
count = 10;—— 执行赋值动作,不是表达式本身(尽管它内部含赋值表达式) -
条件语句:如
if (score >= 60) { ... }—— 整个if是语句,括号内score >= 60才是表达式 -
循环语句:如
for (int i = 0; i —— 循环结构是语句,其中的i++、i 都是表达式 -
空语句:单独一个分号
;也是合法语句,不计算、不返回
表达式和语句的常见混淆点
有些语法看起来像表达式,实则属于语句;有些看似语句,内部却依赖表达式驱动。关键看是否“可求值”和“是否构成完整操作单元”。
立即学习“Java免费学习笔记(深入)”;
-
{ x = 1; y = 2; }是语句块,不是表达式——它不返回值,也不能放在赋值号右边 -
(x = 1)是表达式(带副作用),可写成int a = (x = 1);,此时a得到1 -
return 5;是语句;而return getValue();中getValue()是表达式,return本身是语句关键字 -
System.out.println("OK");是语句;但System.out.println的调用本身是表达式(返回 void),只是 Java 允许 void 表达式出现在语句位置
为什么区分它们很重要
理解表达式与语句的边界,直接影响代码合法性判断和设计逻辑。
- 不能把纯语句(如
if (...) {})直接用在需要值的地方:错误示例int z = if (x > 0) 1 else 0;(Java 不支持此语法) - 三元运算符
? :是表达式,必须返回值,因此可用于赋值或参数传入:String s = flag ? "yes" : "no"; - lambda 表达式(如
() -> 42)本质是表达式,可赋给函数式接口变量;而普通方法定义是语句(属于类体的一部分) - 编译器报错常提示 “not a statement” 或 “not an expression”,就是因误将语句当表达式用,或反之










