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 ...