Java 为什么for循环可以保存返回的布尔值而不能保存原始布尔值?
看看下面代码片段的for循环Java 为什么for循环可以保存返回的布尔值而不能保存原始布尔值?,java,for-loop,boolean,Java,For Loop,Boolean,看看下面代码片段的for循环 class Practice { static boolean foo(char c){ System.out.print(c); return true; } public static void main( String[] args ){ int i = 0; for (foo('A'); foo('B') && (i < 2); foo('
class Practice
{
static boolean foo(char c){
System.out.print(c);
return true;
}
public static void main( String[] args ){
int i = 0;
for (foo('A'); foo('B') && (i < 2); foo('C')){
i++;
foo('D');
}
}
}
这是Oracle的java官方语法:
ForControl:
ForVarControl
ForInit ; [Expression] ; [ForUpdate]
ForVarControl:
{VariableModifier} Type VariableDeclaratorId ForVarControlRest
ForVarControlRest:
ForVariableDeclaratorsRest ; [Expression] ; [ForUpdate]
: Expression
ForVariableDeclaratorsRest:
[= VariableInitializer] { , VariableDeclarator }
ForInit:
ForUpdate:
StatementExpression { , StatementExpression }
据我所知,ForInit和ForUpdate需要一个语句,而不是像true
这样的文本值或像b
这样的表达式
这是Oracle的java官方语法:
ForControl:
ForVarControl
ForInit ; [Expression] ; [ForUpdate]
ForVarControl:
{VariableModifier} Type VariableDeclaratorId ForVarControlRest
ForVarControlRest:
ForVariableDeclaratorsRest ; [Expression] ; [ForUpdate]
: Expression
ForVariableDeclaratorsRest:
[= VariableInitializer] { , VariableDeclarator }
ForInit:
ForUpdate:
StatementExpression { , StatementExpression }
据我所知,ForInit和ForUpdate需要一个语句,而不是像true
这样的文本值或像b
这样的表达式
仅对以下内容进行一点扩展:
ForInit
和ForUpdate
必须是语句表达式
StatementExpression
是一种可以生成语句的表达式(具体地说,想象一下,StatementExpression;
称为ExpressionStatement
)
并非所有表达式都是语句表达式:例如,您不能编写以下内容:
boolean b = true;
b; // b is an expression, not a StatementExpression
someMethod(b); // MethodInvocation is a StatementExpression
这有点像喊出一个词“true!”——它本身没有任何意义:你必须用一些上下文来围绕它,比如“Java有4个字母,这是真的”
类似地,4+3代码>是不允许的,因为它不“做”任何事情:7只是。。。是
但是,您可以这样写:
boolean b = true;
b; // b is an expression, not a StatementExpression
someMethod(b); // MethodInvocation is a StatementExpression
因此,您可以在ForInit
和ForUpdate
中使用someMethod(b)
,但不能使用b
你可以找到所有不同类型的语句expression
(我举了一些例子):
只需对以下内容进行一点扩展:
ForInit
和ForUpdate
必须是语句表达式
StatementExpression
是一种可以生成语句的表达式(具体地说,想象一下,StatementExpression;
称为ExpressionStatement
)
并非所有表达式都是语句表达式:例如,您不能编写以下内容:
boolean b = true;
b; // b is an expression, not a StatementExpression
someMethod(b); // MethodInvocation is a StatementExpression
这有点像喊出一个词“true!”——它本身没有任何意义:你必须用一些上下文来围绕它,比如“Java有4个字母,这是真的”
类似地,4+3代码>是不允许的,因为它不“做”任何事情:7只是。。。是
但是,您可以这样写:
boolean b = true;
b; // b is an expression, not a StatementExpression
someMethod(b); // MethodInvocation is a StatementExpression
因此,您可以在ForInit
和ForUpdate
中使用someMethod(b)
,但不能使用b
你可以找到所有不同类型的语句expression
(我举了一些例子):
假设您的代码类似于booleanb=true;B是的代码>。你期望什么b代码>或<代码>真代码>如何实现?它什么也不做/它不影响任何东西-这就是为什么它被认为是程序员的错误(就像死代码一样),编译器会告诉我们。使用foo(…)
应用程序的状态可能会发生一些变化;B是的代码>。你期望什么b代码>或<代码>真代码>如何实现?它什么也不做/它不影响任何东西-这就是为什么它被认为是程序员的错误(就像死代码一样),编译器会告诉我们。使用foo(…)
应用程序状态可能会发生一些变化。