java 函数引用_Java 函数调用时值传递还是引用传递?

假设有一个变量 a=new object(),要传递到一个方法中,那么 a 变量会有一份拷贝,这个拷贝也指向对象 object,这个拷贝才是真正进入函数体中参与运算的变量。

a6e25657a790ef883569496a352b4df0.png

通常情况下,a 的拷贝所操作的对象就是 a 指向的对象,但是当 a 的拷贝指向另外的对象,并且操作另外的对象时,那么 a 指向的对象并不会改变。

看一个例子。

public static void main(String[] args) {

StringBuffer sb=new StringBuffer("abcde");

changeValue(sb);

System.out.println(sb);//abcde12345

changeReference(sb);//abcde12345

System.out.println(sb);

}

static void changeValue(StringBuffer p)

{

p.append("12345");

}

static void changeReference(StringBuffer p)

{

p=new StringBuffer("12345");

}

调用 changeValue 时,sb 和 sb 的拷贝,都指向了 stringbuffer 对象,值为 abcde。

1620

changeValue 方法中,p 就是 sb 的拷贝,对 stringbuffer 增加了 12345 之后,sb 的值也会改变了。

1620

然后 p 指向另一个对象,这时候,sb 所指向的对象并没有任何改变,所以 sb 的输出还是原来的值。

1620

总结

很多人都喜欢把引用类型的对象传入方法体,然后通过方法中的运算,改变了这个引用对象的值。因此感觉就好像是把对象传递给了方法,但是这种做法不一定总是正确的,一旦方法中的形参指向了一个新的对象,那么方法体外的对象并不会得到任何改变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值