黑马程序员技术交流社区
标题:
String是引用数据类型 但是是值传递 怎么理解?
[打印本页]
作者:
wyy283
时间:
2013-7-25 16:59
标题:
String是引用数据类型 但是是值传递 怎么理解?
本帖最后由 杨兴庭 于 2013-7-25 23:19 编辑
String是引用数据类型 但是是值传递 怎么理解?
引用数据类型不是在方法中修改的值 更改吗?
求大神详解一下 举例子啊
作者:
薛淑凯
时间:
2013-7-25 18:15
引用数据类型传递的是对象在内存中的地址。你写的问题描述的不是很详细,不知道这个例子能帮到你不,还有疑问再回复我
public static void main(String[] args) {
String str="123";//str指向"123"的地址
change(str);//传递地址
System.out.println(str);//str依然指向"123"
}
public static void change(String str1){//str1获得"123"的地址
System.out.println(str1);//123
str1="abc";//修改str1指向的地址
System.out.println(str1);//abc
}
复制代码
作者:
杜光
时间:
2013-7-25 21:14
在String中有“池”这么一个概念,不知道楼主知道不知道,比如说String str="hello" 这句话创建了两个对象,一个是str这个对象,另外一个就是在池中创建的"hello",接着str="helloMan",使用这句话的时候,虚拟机首先会去池中找有没有"helloMan"字符串,如果有的话,就拿池中的来用,没有的话就和之前那句代码一样处理,这样一来,无论从效率上还是内存消耗上来讲都是比较大的,因为String类是final类型的(这个可以参考API或者源代码)。
而StringBuffer就不一样了,是JAVA专门用来处理字符串拼接问题的一个类,StringBuffer
sb="a";
sb="ab";
第二句代码就不会创建新的实例了,而是在a的后面加了一个b。
以前我做过一个测试,就是测试一下String类和StringBuffer在处理字符串拼接的时候的效率问题,结果证明StringBuffer的处理速度是String类处理速度的1000倍,也就是说StringBuffer处理一秒的事情String类要处理16分钟还多。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2