何时未分配的表达式是有效的语句? |
您所在的位置:网站首页 › eclipse编译没反应 › 何时未分配的表达式是有效的语句? |
我已经阅读了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 |