1.通过 " " (双引号)创建的对象,相同的字符串内容是在同一个地址存储的
详解如下:
用以下String类型创建的对象为例:
public class str {
public static void main(String[] args) {
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
}
}
如上代码所示:
s1和s2实际代表的是字符串在栈内存中的地址,字符串常量存放在堆内存中,s1和s2同时指向堆内存中的同一个字符串。判断s1==s2是否为真时,运行结果为true。而因为Java中的特殊机制,单独输出s1时则会直接输出字符串,不会输出地址。
2. 通过new来构造新的字符串对象时,即使构造的字符串内容一样,也会在不同的地址分开存储
用以下String类型创建的对象为例:
public class str {
public static void main(String[] args) {
char ch[]={'a','b','c'};
String s=new String(ch);
String s2=new String(ch);
System.out.println(s==s2);
}
}
在此处的s和s2则是指向不同的存储地址。