日期:2014-05-20  浏览次数:20670 次

java 编程语言 关于String的一点疑问
代码
public class ClassDemo {
int x=0;
}

public class Test{

  public static void append(String c){c="abcc";}

  public static void append(ClassDemo c){c.x=23;}

  public static void main(String[] arg) {
String s="abc";
append(s);
System.out.println(s);

ClassDemo cd=new ClassDemo();
System.out.println("ClassDemo.x="+cd.x);
append(cd);
System.out.println(cd.x);
}

}

运行结果:
abc
ClassDemo.x=0
23


疑问:为什么String 在方法中改变值没有影响,而自定义类型改变值了有影响,String 和自定义类型都是引用类型,为什么结果不一样了,自定义类型DemoTest 申明为 final 结果还是 32 



------解决方案--------------------
问题是这样的:
在方法中,你传递的引用参数是一个地址的复制,他能访问到对应地址里的值信息。当你对这个地址重新复制的时候,不影响你的原参数信息。
所以,为了对你对象中值进行改变,我们将信息进行封装成类。其实,在你传递给自定义类型的时候,你修改其内部的属性信息,就相当于,对应的属性地址发生了变化,这个变化是在对象内部实现的。