2015-03-02 15 views
7

errore di compilazione: Il lato sinistro di una cessione deve essere una variabileperché il ciclo non accetta direttamente il valore booleano?

class A { 
    public static void main(String[] args) { 

     for(true;true;true) {//compilation error 

     } 
    } 
} 

ma quando ho provato in questo modo, non v'è alcun errore di compilazione

class A { 
    public static void main(String[] args) { 

     for (getBoolean(); true; getBoolean()) { 

     } 
    } 

    public static boolean getBoolean() { 
    return true; 
    } 
} 

getBoolean() restituisce un valore booleano valore, quindi per il primo caso perché il ciclo for non accetta direttamente il valore booleano?

+6

cosa stai cercando di fare? questo non ha senso. – Brandon

+1

La tua domanda sembra essere costruita su una premessa sbagliata. Non ricevo l'errore "Il lato sinistro di un compito deve essere una variabile" durante la compilazione del primo campione; Ricevo l'errore che 'true' non è un'affermazione, che è completamente accurata. –

+0

@blm Ha importanza? È una domanda valida – Voldemort

risposta

14

Da JLS:

BasicForStatement: 
    for (ForInitopt ; Expressionopt ; ForUpdateopt) Statement 

ForStatementNoShortIf: 
    for (ForInitopt ; Expressionopt ; ForUpdateopt) StatementNoShortIf 

ForInit: 
    StatementExpressionList 
    LocalVariableDeclaration 

ForUpdate: 
    StatementExpressionList 

StatementExpressionList: 
    StatementExpression 
    StatementExpressionList , StatementExpression 

Then:

StatementExpression: 
    Assignment 
    PreIncrementExpression 
    PreDecrementExpression 
    PostIncrementExpression 
    PostDecrementExpression 
    MethodInvocation 
    ClassInstanceCreationExpression 

Come si può vedere Method Invocation è consentito e literal value non è.

+0

Ottima risposta :-) – squiroid

4

Secondo doc

for (initialization; termination; 
    increment) { 
    statement(s) 
} 

E intialization e l'incremento deve essere l'espressione (assegnazione) non è semplice booleano ma nella chiamata di funzione java è considerato come l'espressione in modo che valuterà in modo corretto.

Problemi correlati