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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪冰伦 中级黑马   /  2015-10-28 11:53  /  758 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s1 = "abc";
String s2 = new String("abc");
这样写,s1,s2是指向不同的对象,内存中有2个abc字符串对象;
那么如果是:
String s1 = "abc";
String s2 = "abc";
这样在内存中会创建两个“abc”吗?还是s1,s2指向同一个“abc”?

5 个回复

倒序浏览
java有这样一种特性,如果定义一个变量,它会首先在内存中去寻找,如果存在的话就不会去创建了。但是如果使用new关键字,那就会在内存中重新开辟一块内存地址用来存储。所以楼主的第一种方式,s1和s2是会指向两个引用;第二种方式,s1和s2会指向同一个引用。
回复 使用道具 举报
String s1 = "abc";
String s2 = "abc";
其实他一定义就是常量了,只要他不new一个,定义相同的在常量池中就是一个
回复 使用道具 举报
内存中存在一个“abc”,s1,s1是String类类型变量,都指向“abc”这个对象而已
回复 使用道具 举报
本帖最后由 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-28 12:58
java有这样一种特性,如果定义一个变量,它会首先在内存中去寻找,如果存在的话就不会去创建了。但是如果使 ...

谢谢,这下明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马