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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄诗宾 高级黑马   /  2013-3-16 23:19  /  1692 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄诗宾 于 2013-3-16 23:46 编辑

String s = new String("xyz");创建了几个String Object?

12 个回复

倒序浏览
创建了两个对象,常量池中有一个对象"xyz",这里用了new String来强制在堆中再创建了一个对象.如果是String s= "xyz",s这个引用就会直接指向常量池的"xyz",而不会是指向在堆中创建的“xyz”。
回复 使用道具 举报
本帖最后由 HM张健 于 2013-3-16 23:32 编辑

2个对象吧  字符串是存储在java空间的串池中 串池中一个 堆中一个
回复 使用道具 举报
22222222222
2个
回复 使用道具 举报
马利 来自手机 中级黑马 2013-3-16 23:54:37
报纸
论坛里有这个问题,两个
回复 使用道具 举报
马利 来自手机 中级黑马 2013-3-16 23:55:22
地板
论坛里出现过这个问题,两个
回复 使用道具 举报
本帖最后由 黑马-王鹏 于 2013-3-17 00:42 编辑

两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,就拿常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过"xyz",这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
聂斌 中级黑马 2013-3-17 01:51:24
8#
郭宝伦 发表于 2013-3-16 23:32
String与new在创建对象时有很大区别。  
String str="abc";   这行代码创建了一个String对象。   
String  ...

怎么会是3个呢
回复 使用道具 举报
聂斌 中级黑马 2013-3-17 02:03:11
9#
String s = new String("xyz") ;

创建了两个对象,new String("xyz ")是个对象,同时里面的参数"xyz "也是个对象,

常量池中只有一个“xyz”,但是堆内存中可能有多个,因为你这里用了new String来强制在堆中再创建了一个对象,所以是两个哈;如果是String s= "xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz”。所以此时内存中有2个对象,,一个是常量池中的"xyz",,另一个是堆内存中的 new String("xyz") ;


另外补充一点:

字符串在内存里面有个常量池,池里面一个数组,存放abc等这样的字符,字符串由字符组成,比如你建"abc"对象,那么他就把那三个字符存放到这个数组当中,比如建"abf"对象,他会到那常量池中找abf字符拼成一个新的字符串对象

回复 使用道具 举报
郭宝伦 发表于 2013-3-17 02:07
String a="ab"+"cd";   这个语句创建了三个对象。 "ab"一个 "cd"也是一个 最后就是把"ab"+"cd"它们连接起 ...

按你的说法 那  String s = "a"+"b"+"c"+"d"+"e";   是创建了几个对象啊?
5个? 6个? 还是 10个?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马