【发布时间】:2014-12-02 16:14:01
【问题描述】:
我在使用 Java 时遇到问题。为什么下面的代码返回null?
public class TestClass {
public String top,top1,top2,top3,top4;
public TestClass(){
changeTop(top);
changeTop(top1);
}
public void printTop(){
System.out.println(top);
}
public void changeTop(String reference){
reference="lolly";
}
}
当我运行以下命令时:
TestClass x = new TestClass();
x.printTop();
它还返回null。我不明白,因为我以为我传递了对ChangeTop 的引用。
我怎样才能解决这个问题?我想将参数的名称赋予一个方法来更改它。
【问题讨论】:
-
我知道我可以这样做。top="lolly",但这不是我想要的。想象我们有一个 top1,top2,top,3... 。难道不能简单地给一个改变值的方法起名字吗?
-
@ZouZou:这个问题不是“Java 是“引用传递”还是“值传递”的重复问题?这里的实现是错误的。 changeTop 方法将“lolly”分配给参数“reference”本身,而不是“top”。因此 top 始终为空。
-
@Nazgul 这就是我恢复关闭的原因。
-
@Nazgul 我不同意 - 这个问题是由对 Java 中引用语义如何工作的基本误解引起的。链接的答案解释了可以做什么和不能做什么,因此完全涵盖了这种情况。
-
@Nazgul 重新阅读这个问题,我想我做对了。 OP 期望构造函数中的
changeTop(top);在调用new TestClass();时更改top 的值。因此,最后的投票实际上是正确的。