String是一个final类,也是一个引用类型,改变引用是可以的,没有什么问题。但是为什么作为参数传递的时候引用就不能改变呢?
我在某论坛见到过这样一段话
【String类有这样一个属性 private final char value[];
String的内容不能被动态地修改,因为底层是字符数组实现的,数组的大小是在初始化时决定的;
如果可以修改,新的字符串长度比原来数组大,那么就会造成数组越界】
这是我见到的比较合理的解析,不知道他说的对不对,如果他说的不对请指出,也请告诉我为是什么,本人也搞不清楚了,谢谢。
------解决思路----------------------
1:你要知道java的传参方式,是值传递,修改传递的值不会影响原值
2:java里的应用和C/C++里的引用是不同的概念,在C/C++中引用初始化之后,引用本身就无法修改了但是引用指向的内容可以修改
------解决思路----------------------
java是值传递,对于复合类型(比如String)它的值就是引用地址~
------解决思路----------------------
建议看下:http://my.oschina.net/zhdkn/blog/130044这个帖子,自己敲下代码
------解决思路----------------------
private void foo1() {
String a = "dog";
String b = a;
b = "cat";
};
private void foo2() {
String a = "dog";
setCat(a);
}
private static void setCat(String b) {
b = "cat";
}
foo1和foo2的原理是一样的,都不能改变a的值。不知道这样楼主是否更容易理解。