java中String初始化的兩種方式,javastring初始化

來源:互聯網
上載者:User

java中String初始化的兩種方式,javastring初始化

     字串可能是任何程式語言中都會出現的對象,java中建立並初始化一個String對象,最常見的方式有兩種: 
String str=new String("XXX"); 
String str="XXX";    

      二者看似相同,其實有很大的差別。 
      前者是java中標準的對象建立方式,其建立的對象將直接放置到堆中,每調用一次就會建立一個新的對象;後者則會在棧中建立一個對象引用變數str,然後查看棧中是否存在"XXX",如果沒有,則將"XXX"存放進棧,並令引用變數str指向它;如果已經有"XXX",則直接令str指向它。這樣充分利用了棧的資料共用優點,當然也可能是一個陷阱,對象很有可能沒有建立,只不過指向一個先前已經建立的對象;而new()方法則能保證每次都建立一個新的對象。 
      下述代碼展示了二者的不同:


輸出結果: 
true 
false



教java中初始化字串變數String toConfession=""

表示的是一個Null 字元串,其實Java建立String變數有兩種方式,一種是你這種,直接用雙引號帶內容的方式,另一種是String str = new String("內容");

這兩種方式是有區別的,這涉及到池的概念,在java中有個常量池,通過第一種方式建立,那JVM會先去常量池裡面找有沒有你的內容,如果有的話,就直接指向那個內容所在位置,如:String str1 = "1"; 這種方式建立,常量池中已經存在了"1"這個常量,所以str1就直接指向了它;而第二種方式,通過new來建立的,String str2 = new String("1");這個時候雖然在常量池中已經存在了"1"這個常量,可是它還是會去堆中先執行個體化一個對象,然後對象指向常量池中的 "1";

總結:
第一種方式:若常量池有已經存在的對象,這種初始化方式不會建立對象(通常常量池會先執行個體化好1-128的整數)
第二種方式:就算常量池已存在對象,還是會在堆中new一個字串對象,然後指向常量池中的內容
 
java中,String類對象中的內容一旦被初始化就不可以再改變,那String類中還有replace與toUpperCase方法

朋友,你好,對於你的問題,我覺得下面的回答您會滿意明了:
String類對象中的內容一旦被初始化就不能再改變 沒錯的,這是String類的特性,一定要記住。
下面舉個例子:
String s = "Hello"; //這時候會在記憶體中開闢一塊空間儲存“Hello”,並且S的引用指向它;
s = “world”; //看這句,初學者一般覺得這樣的話s的值就變了啊,跟String的特性相違背了啊,其實並不然,s只是對象的引用,真正的對象存在了記憶體中,執行這句語句的時候,會在記憶體中重新開闢一塊記憶體,用來儲存“world”,並將原來的s引用指向“world”。但是原來的記憶體中的“hello”並沒有改變。也就是說String類對象中的內容一旦被初始化就不能再改變。
希望您會看明白。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.