黑马程序员技术交流社区

标题: new String("abc")是两个对象还是两个对象? [打印本页]

作者: jsfjb    时间: 2012-12-10 10:57
标题: new String("abc")是两个对象还是两个对象?
String str2 = new String("abc");
变量str2在内存中是两个对象。我怎么证明它是两个对象。同志们别给我回答,双引号引起的abc已经是一个对象了。new又是一个对象了。

String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1.hashCode() == str2.hashCode());

因为输出是true 所以我说它是一个对象。


作者: yingying    时间: 2012-12-10 11:06
String str1 = "abc";执行这句代码时,内存中就会有一个字符串“abc”;在执行这句代码时String str2 = new String("abc"),虚拟机就会先检查字符串缓冲区中有没有“abc”这个内容,如果有,就不会创建新的,直接复用了,只是字符串特有的一种机制。   

String str1 = "abc";
String str2 = new String("abc");
这两句话的内容在内存中就是一个,只是他们的引用不相同吧!
作者: jsfjb    时间: 2012-12-10 11:31
yingying 发表于 2012-12-10 11:06
String str1 = "abc";执行这句代码时,内存中就会有一个字符串“abc”;在执行这句代码时String str2 = new ...

您的意思是 这是 一个对象了?
作者: 吴健    时间: 2012-12-10 12:23
    String str2 = new String("abc");执行时会创建两个或一个对象,”abc”对应一个对象,这个对象放在字符串常量缓冲区,常量”abc”不管出现多少
遍, 都是缓冲区中的那一个,即内存中仅存放一份该字符串变量。 new String() 每执行一遍, 就创建一个新的对象,new String("abc")用到常量”abc”对象的
内容来创建出一个新 String 对象。如果以前内存中已经存在"abc"字符串常量,执行new String("abc")时就不会创建”abc”对象了,直接从缓冲区拿。
作者: yingying    时间: 2012-12-10 12:49
jsfjb 发表于 2012-12-10 11:31
您的意思是 这是 一个对象了?

还是两个对象,一个对象是内容“abc”,另一个对象是地址,你看看毕老师的视频 记得他讲了
作者: jsfjb    时间: 2012-12-13 09:37
吴健 发表于 2012-12-10 12:23
String str2 = new String("abc");执行时会创建两个或一个对象,”abc”对应一个对象,这个对象放在字 ...

直接从缓冲区中拿了的话,也就是只有一个对象了呗。还是没听明白。
作者: 刘 佳    时间: 2012-12-16 10:48
String类重写了hashCode()方法,我画了张图给你,看看吧,也许会懂

无标题.jpg (32.36 KB, 下载次数: 91)

无标题.jpg

作者: 刘 佳    时间: 2012-12-16 10:56
你可以用==号验证。 ==在基本数据类型中比较值。在引用类型对象比较的是地址。
作者: yuchen208    时间: 2012-12-16 19:14
从官方文档显示:
String str = "abc";
等效于:
     char data[] = {'a', 'b', 'c'};
     String str = new String(data);

所以:
String str1 = "abc";   -->  st1 = new String("abc");
String str2 = new String("abc");
作者: yuchen208    时间: 2012-12-16 19:21
"=="基本上比较的是值,这里是变量值
"equal"比较的是对象内容

作者: yuchen208    时间: 2012-12-16 19:28
博主使用的hashcode()返回的是对象存储物理地址
对象都是同一个所以返回时true
只是引用类型变量不同
作者: 高焕杰    时间: 2012-12-16 22:48
哈哈,终于找到知音了——有问题,来黑马论坛,高手如云的地方,各抒己见的的地方。呵呵
作者: 高焕杰    时间: 2012-12-16 22:49
相见恨晚啊!!!:'(:'(:'(




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