2014-11-23 7 views
8

Q: Posso modificare il tipo di dichiarazione per una variabile in Java?Posso modificare il tipo di dichiarazione per una variabile in Java?

Per esempio,

public class Tmp{ 
    public static void main(String[] args) { 
    String s = "Foo"; 
    s = null; //same Error results whether this line included or not 
    int s = 3; 
    System.out.println(s); 
    } 
} 

Ma i risultati di compilazione tentato nel messaggio:

Error: variable s is already defined in method main(java.lang.String[]) 

Stranamente, ri-dichiarando il tipo di una variabile funziona bene in una sessione DrJava interattivo:

> String s = "Foo" 
> int s = 1 
> s 
1 

Cosa sta succedendo?

+7

No, non si può ridichiarare variabili. – August

+1

Quello che penso possa accadere nella tua sessione DrJava o è vederti dichiarare una variabile con lo stesso nome e metterla in un ambito diverso (come discusso nella risposta di mprabhat), o sta prendendo il conflitto e scartando la prima dichiarazione . – user3424612

risposta

6

Posso cambiare il tipo di dichiarazione di una variabile in Java?

No, il compilatore sa che s esiste già all'interno della stessa portata e viene dichiarato di tipo String.

Non ho mai usato DrJava in precedenza, ma come interprete interattivo, potrebbe essere in grado di declassare la prima variabile e sostituirla con quella dichiarata nella nuova istruzione.

5

I nomi di variabili all'interno di un ambito sono corretti, quindi non è possibile avere la stessa variabile con più tipi. Puoi avere lo stesso nome con due tipi diversi ma in un ambito diverso. Quindi sotto l'esempio se si considera va bene visto che stiamo cambiando tipo in due ambiti diversi. Livello di un livello di istanza e livello del metodo di secondo tempo.

public class Test { 
    private String variable = ""; 

    private void init() { 
     int variable = 10; 
    } 
} 
3

No.

Ma si può provare qualcosa di simile

public class Tmp 
{ 
    public static void main(String[] args) 
    { 
    { 
     String s = "Foo"; 
     s = null; 
    } 
    int s = 3; 
    System.out.println(s); 
    } 
} 

Ma cosa si vuole veramente questo? Può essere davvero fonte di confusione per i lettori, se il tipo di una variabile cambia.

3

Non è possibile modificare la dichiarazione di una variabile all'interno dello stesso ambito.

Poiché tutto in Java è un oggetto, si può anche dichiarare s come un oggetto e farlo diventare qualcosa che ti piace ...

Se drjava consente di ridichiarare la variabile all'interno della stessa portata, allora il suo comportamento è strano Segnala l'errore

Questo codice dovrebbe funzionare:

Object s; 

s="Foo"; 
System.out.println(s); 
s=3; 
System.out.println(s); 
Problemi correlati