1. 程式人生 > >這個Java基礎面試題你真的會嗎?

這個Java基礎面試題你真的會嗎?

你咱不往下看,先想想你的答案是什麼?

這裡先來聊聊String的intern()方法是幹什麼的?

intern方法是一個native方法,空口無憑,咱們還是可以看看Stirng的原始碼

從方法的註釋咱們可以知道,它的作用:

1:如果字串常量池中已經包含一個等於此Stirng物件的字串,則返回代表池中的這個字串的String物件,

2:第一條不成立。則將此String物件包含的字串新增到常量池中,並且返回此String物件的引用

再回到上面的題目,答案有兩種,

1:如果jdk版本為1.6時,會打印出兩個false

2:如果jdk版本是大於等於1.7的話,打印出來的是true和false各一個

為什麼會這樣呢????

第一,jdk1.6中intern方法會把首次遇到的字串例項複製到永久代,返回的也是永久代中這個字串的引用,並且StringBuilder建立字串例項是在堆上,所以必然不是同一個引用,所以導致都是false。

第二,jdk1.7中intern方法的實現不會再複製例項,只是在常量池中記錄首次出現的例項引用,因此intern方法返回的引用和StirngBuilder建立的那個字串例項是同一個,對於str2中比較返回false是因為"java"這個字串在執行StirngBuilder.toString()之前已經出現過了,字串常量池中已經有它的引用了,不符合首次出現的原則,而"計算機軟體"這個字串則是首次出現的,因此返回true。

在上面的第二條中的"java"字串的解釋貌似有些牽強,下面再來證實一下。

這個就足夠解釋上面答案了

更多java技術,請掃描關注