2014-11-23 135 views
8

问:我可以在Java中更改变量的声明类型吗?我可以在Java中更改变量的声明类型吗?

对于例如,

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

,而是试图编译结果的消息:

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

奇怪的是,重新声明一个变量的类型作品就好在交互式DrJava会话:

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

发生了什么事?

+7

不,你不能重新声明变量。 – August 2014-11-23 17:54:27

+1

我认为在你的DrJava会话中可能发生的是要么是看到你声明一个相同名称的变量并将它放在一个不同的范围内(如mprabhat的答案中所讨论的),要么捕获冲突并且丢弃第一个声明。 – user3424612 2014-11-23 18:01:06

回答

6

我可以改变Java中的变量声明类型?

不,编译器知道s已经存在于同一范围内并被声明为String类型。

我以前从未使用过DrJava,但作为一个交互式解释器,它可能能够取消第一个变量的范围并将其替换为新语句中声明的变量。

5

范围内的变量名是固定的,所以你不能有多个类型的变量。您可以使用两种不同类型的相同名称,但在不同的范围内。所以下面的例子,如果你考虑罚款,因为我们正在改变类型在两个不同的范围。一个实例级别和二级方法级别。

public class Test { 
    private String variable = ""; 

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

但你可以尝试这样的事情

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

但是你真的想要吗?如果变量的类型发生变化,读者可能会感到困惑。

3

您不能在相同范围内更改变量的声明。

因为一切都在Java是一个对象,你可以也宣告S作为一个对象,并让它成为你喜欢的东西......

如果drjava允许你在同一范围则其行为内重新声明变量很奇怪。报告错误。

此代码应工作:

Object s; 

s="Foo"; 
System.out.println(s); 
s=3; 
System.out.println(s); 
相关问题