2017-09-11 15 views
0
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"); 
    } 
} 

并且如果我们使用实习生()方法都具有可变同样参考地址,意味着实习生()方法是使用存储在字符串字符串常量池的。 我有点困惑,谁能帮助

+0

“意思实习生()方法是用来存储字符串的字符串常量池的”不完全是。 'intern()'只会在池中没有这样的字符串时才将字符串存储在池中。如果是这样,'intern()'将返回对已存储对象的引用(在你的情况下''data''literal'用作'new String(“data”)''的*参数*)。 – Pshemo

回答

0

真。

但有在你的代码中使用一个以上的对象。

new创建一个对象每次调用的时候 - 这是Java的语义,它不能被周围的工作(例如,有人可能希望将新创建的对象上同步),和字符串文字(即刚好在引号字母)创建一个对象而类是第一次加载。

当你的方法写:

new String("test"); 

然后一个字符串字符串被池中创建,而类加载,另外一个将每行被调用时创建(也许永远,也许很多次)。由于字符串是不可变的,所以第二个字符串可能与第一个字符串共享字符缓冲区,所以通常它在使用的内存方面不是问题。

相关问题