代码如下,台式机不联网,手敲的,主要看大致逻辑:
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