2013-07-11 23 views
17

Sono sorpreso di vedere questo comportamento.Dichiarazione di variabili senza nome - perché funziona?

È un errore o qualcosa del genere?

for(Object obj = new Object(), Integer = new Integer(300); 
    obj.toString().length()>3; 
    System.out.println("on object's loop")) { 

} //causes an infinite loop (not foreach loop, of course) 

sopra codice compila ed eseguire bene senza alcun riferimento a new Integer(300). Perchè così?

Mi interessa solo sapere perché Integer = new Integer(300); va bene senza alcun riferimento.

+1

Dichiara una nuova variabile denominata 'Integer' di tipo' Object' con valore iniziale "un nuovo' java.lang.Integer', valore 300 ". Qual'è la tua domanda? – Dirk

+1

Riaperto - È una domanda legittima (se forse mal formulata). (Potrebbe essere saggio che l'OP riformuli il titolo). –

risposta

27
Object obj = new Object(), Integer = new Integer(300); 

Questo crea due variabili:

  1. obj di tipo Object, che viene assegnato a new Object().
  2. Integer (sì, questo è il nome della variabile) anche di tipo Object, che viene assegnato a new Integer(300).

A proposito, questo non ha nulla a che fare con lo for -loop; quella linea avrebbe compilato bene da solo. Ora, se quello , fosse davvero un ;, sarebbe una storia diversa.

In generale, possiamo costruire le dichiarazioni validi di forma:

Type t1 = ..., t2 = ..., t3 = ..., ...; 

che equivale a

Type t1 = ...; 
Type t2 = ...; 
Type t3 = ...; 
... 
+4

Ah! A causa della virgola, "Intero" è interpretato come un nome di variabile di tipo "Oggetto".(Non mi sono mai piaciute molto le dichiarazioni estese con virgola, poiché creano ogni sorta di opportunità di errore/confusione.) –

+1

E usando Integer come identificatore, avendo questi due insieme confuso un sacco. – kosa

+1

Poiché 'Integer' non è una parola chiave riservata Java (come contraria a' int'), può essere utilizzata come nome della variabile. –

15

Penso che stia chiedendo perché Integer = new Integer (300) funzioni. - arshajii 2 min fa

Integer è valida nome identificativo e il suo tipo è Object a causa della

Object obj = new Object(), Integer = new Integer(300); 

che equivale a

int a=2, b=4; 

obj.toString() stampe il String (che consiste nome di classe e codice hash), che ha lunghezza> 3, quindi il ciclo infinito

+0

Penso che stia chiedendo perché "Integer = new Integer (300)" funzioni. – arshajii

+0

@arshajii ovviamente l'uomo !! –

+0

@Sachin risposta aggiornata –

3
String String = "foo"; 
    System.out.println(new String(String)); 

è anche legale - il compilatore è abbastanza intelligente per capire che è un riferimento variabile e che non lo è.

Problemi correlati