java中String建立對象分析

來源:互聯網
上載者:User

標籤:沒有   建立   判斷   利用   new   win   控制代碼   又能   intern   

String str=new String("abc");   緊接著這段代碼之後的往往是這個問題,那就是這行代碼究竟建立了幾個String對象呢?

相信大家對這道題並不陌生,答案也是眾所周知的,2個。

接下來我們就從這道題展開,一起回顧一下與建立String對象相關的一些JAVA知識。 

我們可以把上面這行代碼分成String str、=、"abc"和new String()四部分來看待。String str只是定義了一個名為str的String類型的變數,因此它並沒有建立對象;=是對變數str進行初始化,將某個對象的引用(或者叫控制代碼)賦值給它,顯然也沒有建立對象;現在只剩下new String("abc")了。那麼,new String("abc")為什麼又能被看成"abc"和new String()呢?

我們來看一下被我們調用了的String的構造器: 

public String(String original) {  //other code ...  }   大家都知道,我們常用的建立一個類的執行個體(對象)的方法有以下兩種:

一、使用new建立對象。

二、調用Class類的newInstance方法,利用反射機制建立對象。

我們正是使用new調用了String類的上面那個構造器方法建立了一個對象,並將它的引用賦值給了str變數。同時我們注意到,被調用的構造器方法接受的參數也是一個String對象,這個對象正是"abc"。由此我們又要引入另外一種建立String對象的方式的討論——引號內包含文本。

 

這種方式是String特有的,並且它與new的方式存在很大區別。 

String str="abc"; 

毫無疑問,這行代碼建立了一個String對象。 

String a="abc";  String b="abc";   那這裡呢?

答案還是一個。 

String a="ab"+"cd";   再看看這裡呢?

答案是三個。

如果已經定義好String a=“ab”,String b =“cd”,

此時 String c = “ab” + “cd” 則只建立了一個,因為“ab”、“cd”已經在字串池中,不需要再建立,建立的只是“abcd”了。

說到這裡,我們就需要引入對字串池相關知識的回顧了。 

在JAVA虛擬機器(JVM)中存在著一個字串池,其中儲存著很多String對象,並且可以被共用使用,因此它提高了效率。由於String類是final的,它的值一經建立就不可改變,因此我們不用擔心String對象共用而帶來程式的混亂。字串池由String類維護,我們可以調用intern()方法來訪問字串池。 

我們再回頭看看String a="abc";,這行代碼被執行的時候,JAVA虛擬機器首先在字串池中尋找是否已經存在了值為"abc"的這麼一個對象,它的判斷依據是String類equals(Object obj)方法的傳回值。如果有,則不再建立新的對象,直接返回已存在對象的引用;如果沒有,則先建立這個對象,然後把它加入到字串池中,再將它的引用返回。因此,我們不難理解前面三個例子中頭兩個例子為什麼是這個答案了。

只有使用引號包含文本的方式建立的String對象之間使用“+”串連產生的新對象才會被加入字串池中。對於所有包含new方式建立對象(包括null)的“+”串連運算式,它所產生的新對象都不會被加入字串池中,對此我們不再贅述。因此我們提倡大家用引號包含文本的方式來建立String對象以提高效率,實際上這也是我們在編程中常採用的。

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