• 1.6k

[已解决]头条视频面试题关于 java String,为什么下面代码输出 123 而不是 abc?

头条视频面试题,为什么下面代码输出 123 而不是 abc?

public class Main {  
    void replace(StringHolder a) {  
        a = new StringHolder("abc");  
    }  

    static class StringHolder {  
        public StringHolder(String value) {  
            this.value = value;  
        }  
        public String value;  
    }  

    public static void main(String[] args) {  
        Main m = new Main();  
        StringHolder test = new StringHolder("123");  
        m.replace(test);
        System.out.println(test.value);
    }  
}
阅读 857
评论
    3 个回答

    可看注释
    在a行代码时,test引用和堆内存如下:test指向123
    test -> {123}

    在b行代码是,引用和堆内存如下:test和a都指向123
    test -> {123} <- a

    在c行代码处,a引用地址改变,但是test引用地址没变,如下:
    test -> {123}
    a -> {abc}

    所以最终test输出 123

    public class Main {  
        void replace(StringHolder a) {
            a = new StringHolder("abc"); // c  
        }  
    
        static class StringHolder {  
            public StringHolder(String value) {  
                this.value = value;  
            }  
            public String value;  
        }  
    
        public static void main(String[] args) {  
            Main m = new Main();  
            StringHolder test = new StringHolder("123"); // a
            m.replace(test); // b
            System.out.println(test.value);
        }  
    }
      相似问题
      推荐文章