Java传参到底传的什么?(剖析)

1. 到底传值还是传引用?
定个基调:传值,只有传值!
八个基本类型传值是没有什么疑问的,那么类的实例化对象呢?
当然也是传值,传的地址值。举个例子Person person=new Person();里面person是一个引用变量,它保存了我们刚刚实例化的一个对象的地址,在JVM的堆里面的地址(注意不是计算机内存的真实地址)。那么在我们将person当参数传递出去的时候传的就是这个地址值,收到参数的函数也就获得了这个对象的地址,也就能够对里面的值进行对应的访问以及修改。

2. 参数传递基本上就是赋值操作!
这一句话说的真是通透!

//请看这个例子里面a和b的所引用的对象实际上是没有发生交换的
public static void swap(Employee x,Employe y){
	Employee temp=x;
	x=y;
	y=temp;
}
Employee a=new Employee("Alice");
Employee b=new Employee("Mike");
swap(a,b);

这个例子能够证明什么呢?
能够有力地证明Java的对象引用是按值传递的,这个传递过程就是个赋值过程,即x=a;y=b;然后发生交换的只是x和y,a和b的值一点没变。
2. 那么Integer、String和Double怎么说?
String,Integer, Double等immutable类型因为没有提供自身修改的函数,每次操作都是新生成一个对象,所以要特殊对待。
Integer 和 String 一样。保存value的类变量是Final属性,无法被修改,只能被重新赋值/生成新的对象。当Integer 做为方法参数传递进方法内时,对其的赋值都会导致原Integer的引用被指向了方法内的栈地址,失去了对原类变量地址的指向。对赋值后的Integer对象做得任何操作,都不会影响原来对象。
所以说这几种对象传进来被修改之后原来引用变量保存的地址已经发生改变,也就是说传值前后它所引用的对象已经不是同一个了。
参考链接:
Java 到底是值传递还是引用传递?
几句话弄清楚Java参数传值还是传引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值