A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-7-25 23:19 编辑

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

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

求大神详解一下  举例子啊

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

2 个回复

倒序浏览
引用数据类型传递的是对象在内存中的地址。你写的问题描述的不是很详细,不知道这个例子能帮到你不,还有疑问再回复我
  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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
在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分钟还多。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马