今天看一个代码,看来看去还是觉得不太习惯,所以写一下助于记忆
一个 dog类。里面有name,age属性
一个类改变属性
public class A {
public void changeDog(Dog dog){
Dog dog2=dog;
dog2.setAge("ageA");
dog2.setName("nameA");
}
}
一个类创建,主类
public class B {
public static void main(String[] args) {
Dog dog=new Dog();
dog.setName("nameB");
dog.setAge("ageB");
A a=new A();
a.changeDog(dog);
System.out.println(dog.toString());
}
}
这里在B中创建了一个dog,设置了属性带B属性。然后在A类中使用新的引用dog2也是指向同一块内存。这里其实就是有两个引用指向一个内存了。然后后面是A类中进行了属性的修改,组后输出的是带A类属性的dog。
这里必须要明白,两个修改的都是那一块内存中的dog。但是是通过两个不同的引用来完成的。所以我刚开始看的时候有些不习惯,仔细分析一遍才感觉其实就那样。
感觉之前写的何柄融:java的函数传参 值传递?地址传递?zhuanlan.zhihu.com
这篇文章中的还稍微复杂些。 还涉及到栈帧有效性之类的。
代码中这样写还是有相应的好处的。这样写是在存数据库的时候,在一次事务中,不进行多次查询和更改一个表,这样会让乐观锁报错。因为如果每次修改完都直接存入数据库,那么在一次事务中两次这样的操作就会报问题。所以是先统一进行修改,最后再存入数据库。 我也不是很懂,感觉后面遇到问题再说吧,这里留个记忆提个醒,情况不同,处理方式不同。