问:我可以在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
发生了什么事?
答案 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);