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