經典java面試題,簡單而又不失深度,你能答對嗎?

String str = new String("hello");

該條語句創建了幾個對象?

如果字符“hello”不在字符串常量池中,那麼創建了一個對象,否則,是創建了兩個:第一個對象是:"hello",存在於字符串常量池中;第二個對象:new String(),存在於堆(heap)中。

String str = "hello";

該條語句創建了幾個對象?

如果字符“hello”不在字符串常量池中,那麼創建了一個對象,否則,創建了0個。

String str = "hello" + "world";

該條語句創建了幾個對象?

根據以上理解,最多創建三個對象,最少0個對象,存在於字符串常量池中。

說明:

之上所說的字符串常量池也叫常量池,存在於Java虛擬機(JVM)中,常量池中保存著很多String對象,且可被共享使用。String類是被final修飾的,一經創建不可被改變,因此不會因共享而產生程序混亂。常量池由String類維護,可調用intern()方法來訪問。

只有使用雙引號(" ")創建的String對象、及由雙引號(" ")和加號(+)創建的String對象,才會被放到常量池中。只要使用了new(包括null)來創建的String對象、即使包含了雙引號(" ")或加號(+),也不會被放入常量池,一定是被放在堆(heap)中。使用雙引號(" ")創建String對象,有助於提高程序運行效率。

有問題,請評論。


分享到:


相關文章: