黑马程序员技术交流社区
标题: String s = new String("xyz")创建了几个对象? [打印本页]
作者: 黄诗宾 时间: 2013-3-16 23:19
标题: String s = new String("xyz")创建了几个对象?
本帖最后由 黄诗宾 于 2013-3-16 23:46 编辑
String s = new String("xyz");创建了几个String Object?
作者: 沈子豪 时间: 2013-3-16 23:28
创建了两个对象,常量池中有一个对象"xyz",这里用了new String来强制在堆中再创建了一个对象.如果是String s= "xyz",s这个引用就会直接指向常量池的"xyz",而不会是指向在堆中创建的“xyz”。
作者: HM张健 时间: 2013-3-16 23:30
本帖最后由 HM张健 于 2013-3-16 23:32 编辑
2个对象吧 字符串是存储在java空间的串池中 串池中一个 堆中一个
作者: HM张超 时间: 2013-3-16 23:43
22222222222
2个
作者: 马利 时间: 2013-3-16 23:54
论坛里有这个问题,两个
作者: 马利 时间: 2013-3-16 23:55
论坛里出现过这个问题,两个
作者: 黑马-王鹏 时间: 2013-3-17 00:22
本帖最后由 黑马-王鹏 于 2013-3-17 00:42 编辑
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,就拿常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过"xyz",这句代表就不会创建”xyz”自己了,直接从缓冲区拿。
作者: 聂斌 时间: 2013-3-17 01:51
郭宝伦 发表于 2013-3-16 23:32
String与new在创建对象时有很大区别。
String str="abc"; 这行代码创建了一个String对象。
String ...
怎么会是3个呢
作者: 聂斌 时间: 2013-3-17 02:03
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:15
郭宝伦 发表于 2013-3-17 02:07
String a="ab"+"cd"; 这个语句创建了三个对象。 "ab"一个 "cd"也是一个 最后就是把"ab"+"cd"它们连接起 ...
按你的说法 那 String s = "a"+"b"+"c"+"d"+"e"; 是创建了几个对象啊?
5个? 6个? 还是 10个?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |