黑马程序员技术交流社区

标题: String创建对象的问题 [打印本页]

作者: 汪冰伦    时间: 2015-10-28 11:53
标题: String创建对象的问题
String s1 = "abc";
String s2 = new String("abc");
这样写,s1,s2是指向不同的对象,内存中有2个abc字符串对象;
那么如果是:
String s1 = "abc";
String s2 = "abc";
这样在内存中会创建两个“abc”吗?还是s1,s2指向同一个“abc”?
作者: 顽固派。    时间: 2015-10-28 12:58
java有这样一种特性,如果定义一个变量,它会首先在内存中去寻找,如果存在的话就不会去创建了。但是如果使用new关键字,那就会在内存中重新开辟一块内存地址用来存储。所以楼主的第一种方式,s1和s2是会指向两个引用;第二种方式,s1和s2会指向同一个引用。
作者: qi8215686    时间: 2015-10-28 13:07
String s1 = "abc";
String s2 = "abc";
其实他一定义就是常量了,只要他不new一个,定义相同的在常量池中就是一个
作者: _let'sgo    时间: 2015-10-28 13:59
内存中存在一个“abc”,s1,s1是String类类型变量,都指向“abc”这个对象而已
作者: lizhg    时间: 2015-10-28 17:46
本帖最后由 lizhg 于 2015-10-29 08:41 编辑

String s1 = "abc";
String s2 = new String("abc");
String字符串类是特殊的类,赋值以后就不能更改,创建好后就在方法区,所以内存中只有一个“abc”,s2重新创建了一个对象,是不同对象指向同一个“abc”。
s1 == s2;==>false
s1.equals(s2);==>false
String s1 = "abc";
String s2 = "abc";
s1 == s2;==>true



作者: 汪冰伦    时间: 2015-10-29 10:05
顽固派。 发表于 2015-10-28 12:58
java有这样一种特性,如果定义一个变量,它会首先在内存中去寻找,如果存在的话就不会去创建了。但是如果使 ...

谢谢,这下明白了




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