Bri*_*acy 1 java arraylist semantics
我的AP计算机科学教科书指出接口中的add()方法List总是返回true,但是当调用此方法时,不必分配其返回类型.

我假设该值被丢弃,因为在这种情况下它没有分配给任何东西.这引出了一个问题,在这种情况下,价值被"抛弃".例如,以下内容无法编译.

为什么第二个片段在与第一个片段基本上留下相同的值时不能编译?(list.add()回报true,(1 < 2)收益率true).
返回值可以忽略.不完整的表达仍然不完整.你可以把它分配给一个变量(并且永远不会再引用它) - 这会"扔掉"这个值(eclipse会警告你,但这不是错误) -
// This is legal, note that a is never referenced after assignment.
public static void main(String[] args) {
boolean a = (1 < 2);
}
Run Code Online (Sandbox Code Playgroud)
代码块可以包含语句,但不能包含表达式. JLS的第14.2节定义了内部块的内容,并且不允许表达式本身.
块:
- {[BlockStatements]}
BlockStatements:
- BlockStatement {BlockStatement}
块语句:
LocalVariableDeclarationStatement
ClassDeclaration
声明
(强调我的)
一种可能的语句是方法调用,因此未分配返回值的方法调用是一个语句,但表达式本身不是语句.
JLS的第14.5节将声明定义为以下之一:
声明: - StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatement
StatementNoShortIf:
StatementWithoutTrailingSubstatement
LabeledStatementNoShortIf
IfThenElseStatementNoShortIf
WhileStatementNoShortIf
ForStatementNoShortIf
StatementWithoutTrailingSubstatement:
块
EmptyStatement
ExpressionStatement
AssertStatement
SwitchStatement
DoStatement
BreakStatement
Continue语句
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
(强调我的)
JLS的第14.8节定义了"表达式声明":
ExpressionStatement:
StatementExpression;
StatementExpression:
分配
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
的MethodInvocation
ClassInstanceCreationExpression
(强调我的)
表达式本身不是表达式语句或语句.