Java中有哪些对象引用方式

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001


1. 值传递(传值方式)

值传递是指将实际参数的值复制给形式参数,在方法内部对参数的修改不会影响到实际参数的值。

为什么需要值传递?

值传递的方式在Java中常用于基本数据类型的传递,因为基本数据类型的值通常较小且占用固定大小的内存空间,通过复制值的方式传递参数效率高,并且不会对原始数据造成影响。

值传递的使用示例

public void modifyValue(int num){
        num=10;
        }

        int number=5;
        modifyValue(number);
        System.out.println(number);  // 输出结果为5,因为num只是number的副本,在方法内修改不会改变原始值

值传递的优点

  • 简单易懂,不容易出错。

  • 不会对原始值造成影响,保护了数据的安全性。

值传递的缺点

  • 当传递大对象时(如数组或自定义的对象),需要复制整个对象,会造成额外的内存消耗和性能损失。

值传递的使用注意事项

  • 无法在方法内部通过值传递方式修改原始参数的值。

2. 引用传递(传址方式)

引用传递是指将实际参数的引用地址传递给形式参数,形式参数可以通过引用地址修改实际参数所指向的对象的值。

为什么需要引用传递?

引用传递的方式在Java中常用于对象的传递,因为对象通常较大且占用不固定大小的内存空间,通过传递引用地址的方式传递参数效率高,并且能够直接对对象进行修改。

引用传递的使用示例

public void modifyName(Person p){
        p.setName("Bob");
        }

        Person person=new Person("Alice");
        modifyName(person);
        System.out.println(person.getName());  // 输出结果为"Bob",因为通过引用传递方式修改了person对象的名称

引用传递的优点

  • 可以直接对对象进行修改,节省内存空间和时间开销。

引用传递的缺点

  • 需要注意防止对引用地址进行误操作,可能导致不可预期的结果。

引用传递的使用注意事项

  • 可以在方法内部通过引用传递方式修改原始参数所指向的对象的值。

3. 对象引用的副本传递

对象引用的副本传递方式是指将实际参数的对象引用副本复制给形式参数,在方法内通过引用副本修改对象的内容不会影响到实际参数指向的对象。

为什么需要对象引用的副本传递?

对象引用的副本传递方式在Java中常用于需要修改对象的某些属性,但不希望修改实际参数指向的对象的情况下使用。通过复制引用的方式传递参数可以避免对原始对象造成影响。

对象引用的副本传递的使用示例

public void appendText(StringBuilder sb){
        sb.append(" World");
        }

        StringBuilder sb=new StringBuilder("Hello");
        appendText(new StringBuilder(sb));  // 将sb的引用副本传递给方法
        System.out.println(sb.toString());  // 输出结果为"Hello",因为方法内修改的是引用副本的对象

对象引用的副本传递的优点

  • 可以修改对象的部分属性,同时避免对实际参数指向的对象造成影响。

对象引用的副本传递的缺点

  • 需要复制对象引用,造成额外的内存开销。

对象引用的副本传递的使用注意事项

  • 在方法内修改的是引用副本的对象,不会改变实际参数指向的对象。

  • 需要注意对象引用的副本传递可能导致额外的内存开销。

最后更新于