美文网首页
一道题目来分析Java中的值传递和引用的传递

一道题目来分析Java中的值传递和引用的传递

作者: lhsjohn | 来源:发表于2018-12-12 15:41 被阅读0次

    这是我看到的一道题

    private static void change(StringBuffer str11, StringBuffer str12) {
    
        str12 = str11;
        str11 = new StringBuffer("new world");
        str12.append("new world");
    }
    
    public static void main(String[] args) {
        StringBuffer str1 = new StringBuffer("good ");
        StringBuffer str2 = new StringBuffer("bad ");
        change(str1, str2);
        System.out.println(str1.toString());
        System.out.println(str2.toString());
    }
    

    结果是什么呢?

    先给出这道题目的答案

    **good new world

    bad**

    下面画图来分析这个过程

    private static void change(StringBuffer str11, StringBuffer str12) {
    
        str12 = str11;//2
        str11 = new StringBuffer("new world");//3
        str12.append("new world");//4
    }//5
    
    public static void main(String[] args) {
        StringBuffer str1 = new StringBuffer("good ");
        StringBuffer str2 = new StringBuffer("bad ");
        change(str1, str2);//1
        System.out.println(str1.toString());
        System.out.println(str2.toString());
    }
    

    执行到第一步的图:

    2018-10-24-1.png

    执行到第二步的图,这里chage方法中的形参str11,str22是实参str1,str2的地址拷贝。

    2018-10-24-2.png

    这里str11和str22是实参str1,str2的地址拷贝,接着执行第三步的图:

    2018-10-24-3.png

    上图中str12地址指向了“good”,接着看第四步图:

    2018-10-24-4.png

    上图中str11的地址指向了堆中新的对象"new world",接着看第五步的图:

    2018-10-24-5.png

    收藏自 一枝花算不算浪漫的博客

    相关文章

      网友评论

          本文标题:一道题目来分析Java中的值传递和引用的传递

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