class Demo {
public static void main(String[] args) {
String a=new String("data");
String b="data";
if(a==b) // return false
System.out.println("a and b has same reference address");
else
System.out.println("not same");
如果是新的关键字对象,"data"
实际存储在String
常量池中。如果存储,则变量a和b都具有相同的引用地址并返回true
,如果不是那么false
。
String c=new String("data").intern();
String d="data";
if(c==d)
System.out.println("true");
else
System.out.println("false");
}
}
并且如果我们使用intern()方法,两个变量都具有相同的引用地址,这意味着intern()方法用于在String Constant池中存储String。 我有点困惑,有人帮忙
答案 0 :(得分:0)
真。
但是你的代码中使用的对象不止一个。
new
每次调用时都会创建一个对象 - 这是Java语义,它无法解决(例如有人可能想要在新创建的对象上进行同步),而String文字(即只是引号中的字母)在第一次加载类时创建一个对象。
当你写一个方法时:
new String("test");
然后在加载类时,在池中创建一个字符串字符串,并且每次调用该行时都会创建另一个字符串(可能永远不会,也许很多次)。由于字符串是不可变的,第二个字符串可能与第一个字符串共享char缓冲区,所以通常它在使用的内存方面不是问题。