当前位置: 代码迷 >> J2SE >> 关于java的String类的一些疑义
  详细解决方案

关于java的String类的一些疑义

热度:71   发布时间:2016-04-23 19:57:06.0
关于java的String类的一些疑问
本帖最后由 qq4285855 于 2015-03-06 11:53:23 编辑
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的值。不知道这样楼主是否更容易理解。
  相关解决方案