2014-11-23 12 views
8

Q: Czy mogę zmienić rodzaj deklaracji dla zmiennej w Java?Czy mogę zmienić typ deklaracji dla zmiennej w Javie?

Dla np,

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); 
    } 
} 

Ale próbowali wyniki kompilacji w wiadomości:

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

dziwne, ponownie deklarując typ zmiennej działa dobrze w sesji interaktywnej DrJava:

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

Co się dzieje?

+7

Nie, nie można redeclare zmienne. – August

+1

Co myślę, że może się dziać w sesji DrJava albo jest to widzi pan deklarując zmienną o tej samej nazwie i umieszczenie go w innym zakresie (omówione w odpowiedzi mprabhat za), albo łapie konfliktu i złomowanie pierwszej deklaracji . – user3424612

Odpowiedz

6

Czy mogę zmienić rodzaj deklaracji dla zmiennej w Java?

Nie, kompilator wie, że s już istnieje w tym samym zakresie i jest zadeklarowany jako typ String.

nigdy nie używałem DrJava wcześniej, ale jako interaktywny interpreter, może być zdolny do de-Scope pierwszej zmiennej i zastąpić go z jednej zadeklarowanej w nowym oświadczeniu.

5

Nazwy zmiennych wewnątrz zakresu jest ustalona, ​​więc nie mogą mieć tej samej zmiennej z wielu typów. Możesz mieć tę samą nazwę z dwoma różnymi typami, ale w innym zakresie. Poniżej przykład, jeśli uważasz, że jest w porządku, ponieważ zmienimy typ w dwóch różnych zakresach. Jeden poziom instancji i drugi poziom metody.

public class Test { 
    private String variable = ""; 

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

nr

Ale można spróbować coś takiego

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

Ale czy naprawdę tego chcesz? Może to być naprawdę mylące dla czytelników, jeśli zmieni się typ zmiennej.

3

Nie można zmienić deklarację zmiennej w tym samym zakresie.

Ponieważ wszystko w Javie jest obiektem, można także zadeklarować s jako obiekt i pozwolić jej stać się coś chcesz ...

Jeśli drjava pozwala redeclare zmienną w takim samym zakresie następnie jego zachowanie to jest dziwne. Zgłoś błąd.

Kod ten powinien działać:

Object s; 

s="Foo"; 
System.out.println(s); 
s=3; 
System.out.println(s); 
Powiązane problemy