java函数中引用的理解

栈存放基本类型的变量、引用;堆存放对象。

1. 首先我们要分清楚对象和引用的概念,这很重要;

class Person{
  String name;
   Person(){
    }
 Person(String name){
   this.name = name;
  }
 public static void changeName(Person person,String newName){
   person.name = newName;
  }
public static void changeName2(Person person,String newName){
   person = new Person(newName);
 }
}

我们写一个Person类;

Person me = new Person("zlz")

我们呢要知道,new Peron("zlz") 这个是在堆中创造了一个对象,而me只是它的一个引用而已。只要我愿意,我可以创建无数个它的引用。而这些引用时互相独立的,但是都指向同一个对象。所以又有着关系。

他们的联系体现在

Person p1 = new Person("zlz");
Person p2 = p1;
Person.changeName(p1,"zly");
System.out.println(p2.name);

 输出: zly

他们的独立性在于

Person p1 = new Person("zlz");
Person p2 = p1;
Person p3 = new Person("xswl");
p2 = p3;
Person.changeName(p1,"zly");
System.out.println(p2.name);

输出:xswl

在java函数中其实就是这样,在静态方法changeName2中实际上进行了这样的操作:

Person.changeName2(p1,"zly");
结合changeName2函数内容上面这句话等价于===》

person newReference = p1;
newReference = new Person("zly");

可以看到,实际上,在函数内部新建立了一个相同的引用,如果在这个引用上修改,那么被修改的对象所有的引用都能看的到这些改动,但是如果是将引用指向新的对象,那么实际上传入的引用依然指向原来的对象,原来的对象啥也没变。

注意这个newReference的作用,实际效果等于函数内部拷贝了引用,中间指向其他对象的话和p1无关。

在函数内部的p1其实已经不是p1了,而是内部新建的newReference.

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值