Ocean
  • 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);
    }  
}
阅读 643
评论 更新于 2月15日
    3 个回答

    在这一句中, StringHolder test = new StringHolder("123");
    test是一个变量,指向 $ StringHoler("123") $ 。

    接下来 m.replace(test); 把 $test$ 传给 $a$ 。 $a$ 拿到了test的引用的拷贝,说白了就是让变量a指向value为123的StringHolder实例,或者说让a也指向 $ StringHoler("123") $。

    a = new StringHolder("abc"); 在replace方法里,又让 $a$ 指向了StringHolder("abc"),也就是value值为abc的StringHolder实例。

    那么问题来了,你让 replace方法里的局部变量 $a$ 指向别人(别的实例),关我 $test$ 啥事儿?

    评论 赞赏 2月14日