何时未分配的表达式是有效的语句?

您所在的位置:网站首页 eclipse编译没反应 何时未分配的表达式是有效的语句?

何时未分配的表达式是有效的语句?

2023-04-14 20:44| 来源: 网络整理| 查看: 265

我已经阅读了Oracle的表达式教程,无法理解这一点.

众所周知,以下代码行是有效的Java语法:

new Object();

但是,当我用原始表达式尝试这个时:

(3 + 2);

Eclipse显示编译错误"赋值的左侧必须是变量".

这不仅适用于原语,也适用于String文字:

"arbitraryString";

那么,未分配的表达式作为Java代码行有效的规则是什么?

1> JB Nizet..:

该规则在Java语言规范中:

某些类型的表达式可以用分号跟随它们作为语句.

ExpressionStatement:

StatementExpression;

StatementExpression:

分配

PreIncrementExpression

PreDecrementExpression

PostIncrementExpression

PostDecrementExpression

的MethodInvocation

ClassInstanceCreationExpression

您会看到构造函数调用是一个语句.但字符串文字或数学表达式不是.

2> Dici..:

创建一个对象或调用或方法可能会产生副作用,我认为这是造成这种情况的主要原因,而算术表达式则不会发生任何事情.

3> Pshemo..:

仅包含的行

new Object();

或者更确切地说

new SomeClass();

是可以接受的,因为SomeClass()构造函数的代码可能就是我们想要的.

但是如果只包含线条

"foo";

要么

2;//or (2+3);

编译器知道除了创建/重用String literal或integer literal之外,这段代码不会做任何其他事情,这意味着它可能是某种程序员错误,因此编译器无法接受它.

@CPerkins是的,但我经常发现*推理*比*规则*更容易记住/理解所以我现在将留下这个答案:) 你的回答是有道理的,但OP的问题是"规则是什么",而不是"差异的原因是什么".

4> bcsb1001..:

您正在寻找表达式和表达式语句之间的区别.像这样myVoid();的语句可以写成声明:这些是无效方法等(这是你知道的部分).表达式,如(3 + 2);和"arbitraryString",没有副作用.它们只能被视为一个值,因为没有代码被执行.表达式语句new Object();可以有副作用和执行代码,有时您只需要执行此代码并忽略返回的值.因此编译器允许这样做.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3