new String对象的时候,内部到底做了什么呢?
看了一下源代码,发现构造函数是这样的,那也就是说其实就是一个简单的复制过程了,将常量池中的字符串的值和hash值全部复制给它
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
那如果此时常量池中已经存在了original这样的字符串,那具体的复制是如何完成的呢?
例如
String t = "abc" 先有这句
String s = new String("abc");然后再new内存
“abc”.value是什么呢?"abc"在常量池中是怎么存储的呢?如果在常量池中是以String对象存在的话,难道它也是通过String的构造函数建立的,也是上面的那个?额 我咋感觉就陷入循环了
。。。。
找了找发现,原来在String类内部有个native方法
public native String intern();
看到native方法,就有种无力的感觉,看来这个具体如何存储的是看不到了,只能知道常量池中有字符串的时候就直接返回一个String的对象,否则就添加到常量池中再返回
|