關於 new String("xyz")建立幾個物件的理解
阿新 • • 發佈:2019-01-09
我們先看一個最簡單的程式
- publicclass T {
- private String str = "###########JAVA2000#####################";
- publicvoid test() {
- String s = "@@@@@@@@@@[email protected]@@@@@@@@@@@@";
- String ss = "###########JAVA2000#####################"; // 特意和str相同
- }
- }
public class T {
private String str = "###########JAVA2000#####################";
public void test() {
String s = "@@@@@@@@@@ [email protected]@@@@@@@@@@@@";
String ss = "###########JAVA2000#####################"; // 特意和str相同
}
}
我們來看一下這個類到底生成了什麼,我們開啟T.class
裡面已經存在了我們用到的2個字串,注意是2個,那個重複的並沒有出現2次。
結論:
- 這種字串是在編譯期間就生成了,可以理解為類載入時,已經在記憶體裡存在了,不再需要new
- 所以 new String("XYZ") 中的 "XYZ" 是在載入時存在的,系統以此為模板,重新分配記憶體空間,建立了一個新的物件
- 至於String str = new String("XYZ"); 裡面的 str 只能算一個引用,一個變數而已,所以單單看這個動作,只建立了一個物件。因為這語句執行前,那個"XYZ"已經存在了。不能計算為這個語句引起的。
總之,這個面試題主要看題目的理解,有些概念很難澄清,雖然大家都知道,但說法不同