黑马程序员技术交流社区

标题: String是引用数据类型 但是是值传递 怎么理解? [打印本页]

作者: wyy283    时间: 2013-7-25 16:59
标题: String是引用数据类型 但是是值传递 怎么理解?
本帖最后由 杨兴庭 于 2013-7-25 23:19 编辑

String是引用数据类型 但是是值传递 怎么理解?

引用数据类型不是在方法中修改的值 更改吗?

求大神详解一下  举例子啊

作者: 薛淑凯    时间: 2013-7-25 18:15
引用数据类型传递的是对象在内存中的地址。你写的问题描述的不是很详细,不知道这个例子能帮到你不,还有疑问再回复我
  1. public static void main(String[] args) {
  2.                 String str="123";//str指向"123"的地址
  3.                 change(str);//传递地址
  4.                 System.out.println(str);//str依然指向"123"
  5.         }
  6.         public static void change(String str1){//str1获得"123"的地址
  7.                 System.out.println(str1);//123
  8.                 str1="abc";//修改str1指向的地址
  9.                 System.out.println(str1);//abc
  10.         }
复制代码

作者: 杜光    时间: 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