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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© OnlyStyle 中级黑马   /  2014-10-31 23:14  /  1894 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

11 个回复

倒序浏览
这个问题我觉得好多人都是模棱两可 我也是  受教了啊
回复 使用道具 举报
多谢啊,复习了
回复 使用道具 举报
呃,这个贴已经发了好几天了,我现在已经不水贴了,谢谢杨哥提醒,我会加油的!
回复 使用道具 举报
解释的很详细,收藏了
回复 使用道具 举报
我觉得从数据类型上直接解释就通了啊
前者是基本数据类型   存储在栈中
后者是引用数据类型  引用变量名string在堆中   引用值abc存储 在栈中,
回复 使用道具 举报
奋斗的蜗牛ksd 发表于 2014-11-5 23:18
我觉得从数据类型上直接解释就通了啊
前者是基本数据类型   存储在栈中
后者是引用数据类型  引用变量名str ...

我看错了
变量名是str  
回复 使用道具 举报
学习了 楼主干掉漂亮
回复 使用道具 举报
马嘉 中级黑马 2014-11-11 16:40:18
9#
受教了,谢谢你
回复 使用道具 举报
马嘉 中级黑马 2014-11-12 07:21:16
10#
楼主,副本这个词我不太理解,能在给我说说吗,谢谢了
回复 使用道具 举报
复习一下,哈哈哈
回复 使用道具 举报
马嘉 发表于 2014-11-12 07:21
楼主,副本这个词我不太理解,能在给我说说吗,谢谢了

副本就是拷贝的意思,就像wow里面的副本一样,大家打的都是一样的,不过却各自为政,互补影响,顺便说一下,instance在英语中也是副本,拷贝的意思,就是照原样给你做一个,不知道我说清楚没有。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马