美文网首页
Java值传递

Java值传递

作者: HUJC超 | 来源:发表于2019-01-30 11:00 被阅读0次

首先要明确Java都是按照值传递的。

    public static void main(String[] args) {
        String x = new String("aaa");
        change1(x);
        System.out.println(x);
        System.out.println("--------------------------");
        
    }
    private static void change1(String x) {
        x ="bbb";
    }

输出的结果是:aaa
原因:当将x传递给change()方法时,将传递x值的复制品(引用)。
这时候change()方法里的x只是原来String x = new String("aaa");中x的副本。然后x="bbb",相当于x副本重新引用了一个"bbb",这与原来的x无关。


image.png

String和其他对象的不同:

public static void main(String[] args) {    
        StringBuilder str = new StringBuilder("aaa"); 
        change2(str);
        System.out.println(str);
        System.out.println("--------------------------");
        
        StringBuilder str2 = new StringBuilder("aaa");
        change2_1(str2);
        System.out.println(str2);
        System.out.println("--------------------------");
        
        List<String>  ls = new ArrayList<>();
        ls.add("aaa");
        change3(ls);
        System.out.println(ls);
    }
    private static void change2(StringBuilder str) {
        str = new StringBuilder("ccc");
    }
    
    private static void change2_1(StringBuilder str2) {
        str2.append("bbb");
    }
    
    private static void change3(List<String> ls) {
        ls.add("ccc");
    }   

输出结果:


result.png

结论:Java在值传递的时候都会copy一个副本,关键是副本变量存储引用,而不是引用本身!!!如果我们真的需要改变对象的值。首先,对象应该是可变的,例如StringBuilder,List,各种自定义的entity等。。。其次,我们需要确保没有创建新对象并将其分配给参数变量,因为Java只传递值。

相关文章

  • 自整理3 值传递和引用传递

    java的值传递和引用传递 首先,由于java没有指针机制,所有java归根究底只有值传递,没有引用传递。java...

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • Java值传递、数据加密

    值传递 Java 基本类型值传递,引用类型值传递 内存图解:

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • [译] Java 值传递 VS 引用传递

    Java是值传递还是引用传递一直都有争论,我们最终下个结论,Java是值传递而不是引用传递。如果Java是引用传递...

  • 谈谈Java的方法参数传递机制

    值传递# Java的方法参数传递是值传递!是值传递!值传递!!!重要的事情说三遍。什么是值传递?一个很简单的例子:...

  • 解读Java参数传递

    Java语言的传递方式只有“按值传递”!“按值传递”! “按值传递”!重要的事情要说三遍。不过呢,按值传递可能还不...

  • java中的参数传递(只有值传递没有引用传递)

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • 解决java中的参数传递问题

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • Java参数传递是值传递

    篇首语:Java基本类型传递的是值的拷贝,Java引用类型传递的是对象地址的拷贝。 在java中,java是通过值...

网友评论

      本文标题:Java值传递

      本文链接:https://www.haomeiwen.com/subject/rhmqsqtx.html