1):
String s1 = new String ("abc");
String s2 = new String("abc");
存在两个引用对象,s1,s2 两个内容相同的字符串对象"abc"他们在内存中的地址是不同的,
只要new 就一定会生成对象
2):但是s1,s2引用的是字符串池中的同一个"abc"
String s1 = "abc";//在常量区中存放了一个abc字符串对象
String s2 = "abc";//此时便不再创建新的abc对象,s1,s2 指向同一个abc
String s3 = new String ("abc");在堆中创建一个新的对象,指向常量池中s1,s2所指的abc
String s4 = new String ("abc");在堆中创建一个新的对象,指向常量池中s1,s3,s3所值的同一个对象、
在此说一下String.intern()方法:
1):new 产生的String在堆中,不再字符串池中
2):intern()去字符串中查找是否存在该内容的String对象
存在:返回引用
不存在:在字符串池中创建新的引用,并返回该引用
思考:new String ("abc")创建了几个对象答案在:
"字符串创建和存储机制2"中