本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
提问:Java 是"逐次引用"还是"逐值传递"?
我一直以为Java使用逐一引用。
然而,我见过一些博客文章(例如,这个博客),声称它不是(博客文章说,Java使用逐值传递)。
我想我不理解他们做出的区别。
解释是什么?
高分回答:
爪哇总是逐值的。 不幸的是,我们根本不处理一个对象,而是杂耍对象处理称为参考(这当然是通过价值)。所选择的术语和语义很容易混淆许多初学者。
它是这样的:
public static void main(String[] args) {
Dog aDog = new Dog("Max");
Dog oldDog = aDog;
// we pass the object to foo
foo(aDog);
// aDog variable is still pointing to the "Max" dog when foo(...) returns
aDog.getName().equals("Max"); // true
aDog.getName().equals("Fifi"); // false
aDog == oldDog; // true
}
public static void foo(Dog d) {
d.getName().equals("Max"); // true
// change d inside of foo() to point to a new Dog instance "Fifi"
d = new Dog("Fifi");
d.getName().equals("Fifi"); // true
}
复制代码
在上面的例子仍然会返回。内部值在函数中不会更改,因为对象参考是按值传递的。如果它通过参考,那么在呼叫后返回。aDog.getName()"Max"aDogmainfooDog"Fifi"aDog.getName()main"Fifi"foo
同样:
public static void main(String[] args) {
Dog aDog = new Dog("Max");
Dog oldDog = aDog;
foo(aDog);
// when foo(...) returns, the name of the dog has been changed to "Fifi"
aDog.getName().equals("Fifi"); // true
// but it is still the same dog:
aDog == oldDog; // true
}
复制代码
public static void foo(Dog d) { d.getName().equals("Max"); // true // this changes the name of d to be "Fifi" d.setName("Fifi"); } 在上面的例子中,是狗的名字后调用,因为对象的名称被设置在里面。执行的任何操作都是为了所有实际目的执行,但无法更改变量本身的价值。Fififoo(aDog)foo(...)foodaDogaDog
文章翻译自 *.com/questions/4…
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞???? 求关注❤️ 求分享???? 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️