【发布时间】:2017-11-12 15:53:09
【问题描述】:
所以我们知道Java 使用按值传递,即它将引用的副本传递给方法。
我想知道为什么会这样,当我用原始参考(我的例子中的string)测试参数参考(我的例子中的param)时说它们是一样的?
下面的代码不应该返回false,即引用不一样,因为复制引用(即新引用)是按值传递的吗?
public class Interesting {
private String string;
public Interesting(final String interestig) {
super();
string = interestig; // original reference is tested against copy reference and it says they are the same
}
public boolean isItTheSame(final String param) {
return param == string;
}
public static void main(final String args[]) {
Interesting obj = new Interesting("String");
System.out.println(obj.isItTheSame(obj.string)); //copy of reference is created here
}
}
【问题讨论】:
-
我没有看到任何创建副本的部分?您认为哪个部分创建了副本?
-
OCA 指南是这样写的:“被调用的方法然后获取它自己的引用变量副本,以按照自己的意愿使用它。”章节将变量传递给方法 - OCA 目标 6.8
-
@AndrewLi 你错了。 Atti 正确地引用了它。引用被复制。你认为那是说对象被复制了,但这不是这句话所说的。这就像复制一个原始值。
-
我想知道“Is Java "pass-by-reference" or "pass-by-value"?”是否仍然是一个合适的骗子,因为它很好地涵盖了变量和引用及其行为。
标签: java parameter-passing pass-by-reference pass-by-value