您好,登錄后才能下訂單哦!
先來個面試題吧
面試題一
String a = "ab";
String b = "a" + "b";
sysout(a==b)
答案是true還是false呢?
我們來一起分析一下這個過程
a變量創(chuàng)建時,會在常量池中開辟一塊空間存放ab,然后將空間地址賦值給a;
b變量創(chuàng)建時,編譯器會自動將+的結(jié)果運算出來,相當于b == "ab",此時JVM會先判斷常量池中是否存在,直接將該對象的地址引用賦值給b變量,因此a跟b都是指向的常量池中的同一塊地址,所以答案是true。
面試題二
String a = "ab";
String b = new String("ab");
sysout(a==b)
a變量的創(chuàng)建跟上一題一樣
b使用new String(str)方式創(chuàng)建字符串時,如果常量池中存在,則拷貝一份放到堆中,并將堆中的地址指向b;如果常量池中不存在,則新建一份放到常量池中,并拷貝一份放到堆里,并將堆里的地址指向b。所以a字符串在常量池中的值跟b所指向的不是同一份,答案為false。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。