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”。值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本身。

2020-10-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值