我已经阅读了Oracle的表达式教程,无法理解这一点.
众所周知,以下代码行是有效的Java语法:
new Object();
Run Code Online (Sandbox Code Playgroud)
但是,当我用原始表达式尝试这个时:
(3 + 2);
Run Code Online (Sandbox Code Playgroud)
Eclipse显示编译错误"赋值的左侧必须是变量".
这不仅适用于原语,也适用于String文字:
"arbitraryString";
Run Code Online (Sandbox Code Playgroud)
那么,未分配的表达式作为Java代码行有效的规则是什么?
仅包含的行
new Object();
Run Code Online (Sandbox Code Playgroud)
或者更确切地说
new SomeClass();
Run Code Online (Sandbox Code Playgroud)
是可以接受的,因为SomeClass()构造函数的代码可能就是我们想要的.
但是如果只包含线条
"foo";
Run Code Online (Sandbox Code Playgroud)
要么
2;//or (2+3);
Run Code Online (Sandbox Code Playgroud)
编译器知道除了创建/重用String literal或integer literal之外,这段代码不会做任何其他事情,这意味着它可能是某种程序员错误,因此编译器无法接受它.
您正在寻找表达式和表达式语句之间的区别.像这样myVoid();的语句可以写成声明:这些是无效方法等(这是你知道的部分).表达式,如(3 + 2);和"arbitraryString",没有副作用.它们只能被视为一个值,因为没有代码被执行.表达式语句new Object();可以有副作用和执行代码,有时您只需要执行此代码并忽略返回的值.因此编译器允许这样做.
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |