黑马程序员技术交流社区

标题: String的经典问题 [打印本页]

作者: OnlyStyle    时间: 2014-10-31 23:14
标题: String的经典问题
String str="abc";
String str=new String("abc");
   二者区别,大家都知道前者这有一个对象,后者两个对象,为什么是这样就未必大家都知道了,先从网上找了一些比较好的答案,分享给大家:
   首先得从new说起,new这个关键字实现的功能是生成相应对象并向JVM申请内存区域来存储该对象,后者就是这种情况,String(String original)这个构造函数的API说明:
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
     由此可见,第二种是先在字符串常量池中创建了一个匿名的String对象"abc",(如果没有的话)作为实参传给此构造函数,再创建一个新的String对象并存在new关键字所申请到的内存中。
    第一种没啥好说的,就是将"abc"字符串创建一个新引用,当然,如果这个字符串没有,新建一个即可,并且这些操作都是在编译期就完成了的。

作者: wf111sxwf    时间: 2014-11-4 14:15
这个问题我觉得好多人都是模棱两可 我也是  受教了啊
作者: zxbzxb333    时间: 2014-11-5 01:29
多谢啊,复习了
作者: OnlyStyle    时间: 2014-11-5 08:57
呃,这个贴已经发了好几天了,我现在已经不水贴了,谢谢杨哥提醒,我会加油的!
作者: yaodd321    时间: 2014-11-5 21:37
解释的很详细,收藏了
作者: 奋斗的蜗牛ksd    时间: 2014-11-5 23:18
我觉得从数据类型上直接解释就通了啊
前者是基本数据类型   存储在栈中
后者是引用数据类型  引用变量名string在堆中   引用值abc存储 在栈中,

作者: 奋斗的蜗牛ksd    时间: 2014-11-5 23:21
奋斗的蜗牛ksd 发表于 2014-11-5 23:18
我觉得从数据类型上直接解释就通了啊
前者是基本数据类型   存储在栈中
后者是引用数据类型  引用变量名str ...

我看错了
变量名是str  

作者: FlyMeToTheMoon    时间: 2014-11-5 23:22
学习了 楼主干掉漂亮
作者: 马嘉    时间: 2014-11-11 16:40
受教了,谢谢你
作者: 马嘉    时间: 2014-11-12 07:21
楼主,副本这个词我不太理解,能在给我说说吗,谢谢了
作者: 王会涛    时间: 2014-11-12 07:34
复习一下,哈哈哈
作者: OnlyStyle    时间: 2014-11-12 10:06
马嘉 发表于 2014-11-12 07:21
楼主,副本这个词我不太理解,能在给我说说吗,谢谢了

副本就是拷贝的意思,就像wow里面的副本一样,大家打的都是一样的,不过却各自为政,互补影响,顺便说一下,instance在英语中也是副本,拷贝的意思,就是照原样给你做一个,不知道我说清楚没有。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2