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

时间:2014-11-23 17:52:51

标签: 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

发生了什么事?

4 个答案:

答案 0 :(得分:6)

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

 public class Test {
    private String variable = "";

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

答案 1 :(得分:6)

  

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

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

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

答案 2 :(得分:4)

没有

但你可以尝试这样的事情

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

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

答案 3 :(得分:4)

您无法在同一范围内更改变量的声明。

由于Java中的所有东西都是一个Object,你也可以将s声明为一个Object并让它变成你喜欢的东西......

如果drjava允许您在同一范围内重新声明变量,那么它的行为就是奇怪的。报告错误。

此代码应该有效:

Object s;

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