字符串可能是任何程序語言中都會出現的對象,java中創建並初始化一個String對象,最常見的方式有兩種:
String str=new String("XXX");
String str="XXX";
二者看似相同,其實有很大的差別。
前者是java中標準的對象創建方式,其創建的對象將直接放置到堆中,每調用一次就會創建一個新的對象;後者則會在棧中創建一個對象引用變量str,然後查看棧中是否存在"XXX",如果沒有,則將"XXX"存放進棧,並令引用變量str指向它;如果已經有"XXX",則直接令str指向它。這樣充分利用了棧的數據共享優點,當然也可能是一個陷阱,對象很有可能沒有創建,只不過指向一個先前已經創建的對象;而new()方法則能保證每次都創建一個新的對象。
下述代碼展示了二者的不同:
輸出結果:
true
false