Java引用传递深入简出
2023-12-14 15:21:10
Java中的值传递和引用传递:
对基本类型的数据进行操作:
由于原始内容和副本都是存储实际值,并且是在不同栈区,因此形参的操作,不影响原始内容。
对引用类型的数据进行操作,分两种情况:
一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。
一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。
问题描述
之前项目中查询与现实数据不一致:
APP 中接收数据代码:
public static void main(String[] args) {
// 数据库参数 {1,2,3,4}
List <Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
bugToList(list);
// 输出` [1, 2, 5, 4]
System.out.println(list);
}
public static void bugToList(List<Integer> list){
List <Integer> bugList = list;
bugList.set(2,5);
}
原因分析:
主要原因是讲list全部赋值到bugList中了:
用我们语法来说就是:方法被调用时是传入的实际值,它在方法被调用前就已经被初始化并且在方法被调用时传入。
解决方案:
我们可以编写时候注意引用的从新赋值:
public static void main(String[] args) {
// 数据库参数 {1,2,3,4}
List <Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
List <Integer> newList = new ArrayList<>();
// 或者可以直接赋值 newList.addAll(list);
//list拷贝到newList
org.springframework.beans.BeanUtils.copyProperties(list, newList);
bugToList(newList);
// 输出` [1, 2, 3, 4]
System.out.println(list);
}
public static void bugToList(List<Integer> list){
List <Integer> bugList = list;
bugList.set(2,5);
}
文章来源:https://blog.csdn.net/weixin_45909849/article/details/132741854
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!