今天遇到了这样一道题:
public class Demo {
private String str = new String("aaaa");
private char[] ch = {'b','c','d'};
public static void main(String[] args) {
Demo demo = new Demo();
demo.test(demo.str, demo.ch);
System.out.print(demo.str + " ");
System.out.println(demo.ch);
}
public void test(String str, char[] ch1) {
str = "eeee";
ch1[0] = 'f';
}
}
这道题最终的结果是: aaaa fcd。
刚开始看这道题想了好久,现在终于想通了,主要是因为自己太菜。我给大家分析一下,希望可以帮助到需要的人:
首先两个成员变量都是对象,都是引用对象。
当在main方法中调用test的方法的时候,传递的是两个引用到test中的形参当中,由于字符串所具有的特性,当str = “eeee”的时候,str引用发生了改变,在这个方法中的str指向了常量池中的eeee的位置。而Demo对象的成员变量str还是指向原来的堆中的地址。
对于char[]数据组来说引用地址一直没有发生改变,改变的是引用对象中的内容。所以会输出以上结果。
欢迎一起讨论,希望你们能关注我的博客,共同进步,共同学习,一起交流。