当前位置: 代码网 > it编程>编程语言>Java > JAVA值传递和引用传递方式

JAVA值传递和引用传递方式

2024年12月01日 Java 我要评论
java值传递和引用传递ps:碰到一个业务bug,抛出异常unsupportedoperationexception,检查代码发现在调用链中,lista=immutablelist.of(xxx);导

java值传递和引用传递

ps:

碰到一个业务bug,抛出异常unsupportedoperationexception,检查代码发现在调用链中,lista=immutablelist.of(xxx);导致lista为不可变list,调用retain()方法抛出异常;

// 原始代码
……
lista.retainall(listb);
// 修改代码1
lista = lista.stream().filter(listb::contains).collector(collectors.tolist);
……

然后我修改:

lista = new arraylist<>();
lista.add(xxx);
  • 因为处理过程有好几个分支,为了避免后续其他地方有lista=immutablelist.of(xxx);此类情况,所以我修改了retain为stream().filter();
  • 然后调试发现值lista修改失败;
  • 还原为lista.retainall(listb);修改成功;

原因

java方法参数均为值传递

参数为基本类型

public class main {
    public static void main(string[] args) {
        // 创建一个整数变量并赋值
        int number = 10;
        // 调用方法并将number传递进去
        changenumber(number);
        // 输出原始变量的值,仍然是10,未被方法改变
        system.out.println(number);  // 输出: 10
    }
    // 定义一个方法,尝试改变参数的值
    public static void changenumber(int num) {
        num = 20;  // 这里只是改变了方法内部副本的值
    }
}

参数为引用类型

  • 引用类型其实传递到方法的其实是引用地址的值,两个引用变量都指向原对象;
  • 所以object.value = xxx;会修改值;
  • 而object = new object()其实只是修改了当前方法入参的引用对象,而原对象未被修改
public class main {
    public static void main(string[] args) {
        // 创建一个对象
        myobject obj = new myobject();
        obj.value = 10;
        // 调用方法并将对象传递进去
        changeobject(obj);
        // 输出对象的值,已被方法改变
        system.out.println(obj.value);  // 输出: 20
		// 调用set方法
		setobject(obj);
		 // 输出对象的值,值不变
        system.out.println(obj.value);  // 输出: 20
    }
    public static void changeobject(myobject obj) {
        obj.value = 20;  // 这里修改的是对象的实际状态
    }
	public static void setobject(myobject obj) {
        obj= new myobjectc();  // 这里修改的是对象的实际状态
    }
    
    static class myobject {
        int value;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com