栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java是“按引用传递”还是“按值传递”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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”。值aDog内main未在功能改变foo与Dog “Fifi”作为对象基准由值来传递。如果是通过引用传递的,则
aDog.getName()inmain
将”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");}

在上面的示例中,

Fifi
是调用后的狗的名字,
foo(aDog)
因为该对象的名称设置在中
foo(...)
。任何操作是
foo
执行上
d
是这样的,对于所有的实际目的,它们被执行的
aDog
,但它是不是可以改变变量的值
aDog
本身。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号