建立了幾個String物件?

2022-02-04 04:50:17 字數 1398 閱讀 2909

string str = "a";

1個,在常量池中建立了乙個字串物件。

string str = new string("a");

2個,在常量池中建立了乙個字串物件"a",在堆中開闢了乙個空間又放了乙個"a"。

string str = "a"+"b";

1個,在編譯期,jvm將"a"+"b"自動識別成"ab",因此只建立了乙個物件,放在常量池中。

string a="a";//建立乙個

string b="b";//建立乙個

string ab1 = a+b;//建立乙個

string ab2= a+b;//建立乙個

4個,第三和第四行,各建立了乙個物件,因為對於編譯器來說,建立ab1和ab2時候,a和b的值被當做是不確定的,所以各自開闢空間建立物件

final string a="a";//

建立乙個放常量池

final string b="b";//

建立乙個放常量池

string ab0=a+b;//

建立乙個放常量池

string ab1=a+"b";//

不再建立

string ab2 = "ab";//

不再建立

3個,在string前邊加個final,後邊再用這個物件的時候,對編譯器來說a的值是確定的,和"a"是乙個東西都是「字面常量字串」。

以下**:

//

此時str1與str2相當於變數,而不是常,因為塊是在執行時才能確定,在編譯時不能確定

final

static

string str1;

final

static

string str2;

static

public

static

void

main(string args)

string str=" ";與string str=new

string();

str=" "會放入池中,但new string()不會放入池中。

string的intern()方法

「當呼叫 intern 方法時,如果池已經包含乙個等於此 string 物件的字串(該物件由 equals(object) 方法確定),則返回池中的字串;否則,將此 string 物件新增到池中,並且返回此 string 物件的引用。它遵循對於任何兩個字串 s 和 t,當且僅當 s.equals(t) 為 true 時,s.intern() == t.intern() 才為 true」,這是jdk文件原文註解。

String,到底建立了多少個物件?

string str new string aaa 這行 究竟建立了幾個string物件呢?答案是2個,而不是3個。由於new string aaa 相當於 aaa 與乙個就是建立出來的放在堆時原例項物件,而另乙個就是放在常量池中的 aaa 物件,當然這裡的str本身只是乙個引用,放在棧裡,用來指向...

會建立幾個物件?

虛擬機器主要分為三塊 棧 存區域性變數及物件的引用 堆 存放物件例項和陣列 方法區 類載入後的資訊,常量 靜態變數 str只是乙個引用變數,他不是物件。new string 是在執行期間,通過string的構造器建立了乙個物件,放在堆中 hello 是在編譯期間,jvm會查詢常量池是否有 hello...

詳述如何建立String物件

關係運算子 判斷值是否相等 如果在基本資料型別中,由於變數與值同在棧中,所以比較的是值是否相等。如果在引用型別中,由於變數中存的是物件的位址則比較的是否位址相同 1,字串建立物件方式有兩種 直接賦值,new構造方法 比如 a,string name tom b,string address new ...