引用传递容易出现的问题

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路引用传递容易出现的问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

代码如下,台式机不联网,手敲的,主要看大致逻辑:

public void static main(String[] args){

     Test a = new Test();

     a.setName(“张三”);

     a.setAge(18);

     setValue(a);

     System.out.println(“name=====” + a.getName());

     setValue1(a);

     System.out.println(“name=====” + a.getName());

     Test b = setValue1(a);

     System.out.println(“name=====” + b .getName());

}

 

public void setValue(Test a){

       a.setName(“李四”);

}

public void setValue1(Test a){

       Test b = a;

      b.setName(“李四”);

}

public Test setValue2(Test a){

       Test b = new Test();

       b.setName(a.getName);

       return b;

}

前两个打印结果都是“李四”,第三个是“张三”。如果有疑问的可以亲自试一下。

 

估计第一个如果有点儿Java基础的应该不难理解,第一个setValue方法相当于抽象出来的方法,其实可以把“  a.setName(“李四”);”这个逻辑直接放到main方法体里面;还有另外一种理解就是,传到setValue方法体里面的其实是a对象的复制实体类,对应的内存中的地址是不变的,因此给a的name赋值也就是给main中的a对象的name赋值。

第二个的解释就是,创建一个Test 对象b,但是你把a的地址以及对象都赋给了b对象,b也就相当于a对象的赋值实体类,因此给b的name赋值也就是给a的name赋值。

第三个直接创建了一个b对象,内存地址与参数中的a对象完全不同了,因此给b的name赋值不会改变a的name的值。

 

今天我就掉进了第二个的坑,因为我想创建另外一个对象来赋值,但是发现给b对象赋值完之后,a对象对应的属性也会发生改变,后来百度了以后,才发现是引用传递的原因。记下便于以后查阅

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158183.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!