自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...
1:前言
相信大家都在面試中都被問到過一個問題,這個問題也是近年來面試官刁難人比較常見的一個問題,所以也被大家所熟知了,本質上也很簡單,但是也是非常基礎的一個題目。
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
Integer a = 180;
Integer b = 180;
System.out.println(a == b);
復制代碼
題目也就是讓你回答一下上面的輸出情況,顯而易見第一個是true,第二個是false,這個大家應該都知道了
2:自動裝箱和拆箱
我們都知道!java的核心思想是:萬物皆對象,但是,實際上為了平時寫代碼的便利性,還是保留了8個基礎數據類型:byte, short, char, int, long, float, double 和 boolean
那么問題來了:下面這種情況怎么操作
//a是Integer對象類型,100是基礎int類型
Integer a = 100;
復制代碼
這個時候我們聰明的編譯器就會調用valueOf去做裝箱為對象
自動拆箱就正好反過來使用對象的intValue()方法區拆箱為基礎數據類型
3:解答上面的 == 不一樣的問題
那么我們在溫故一下上面那個問題好了,額外我再加一個干擾項
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // -> true
Integer a = 180;
Integer b = 180;
System.out.println(a == b); // -> false
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b); // -> false
復制代碼
所以我們要先理解==的意思,基礎類型==是比較值是否相等,對象類型是比較內存地址是否相同
那么我們結合Integer.valueOf()代碼就可以知道,我們在裝箱的時候會進行一次緩存判斷,在[-128,127]范圍內的時候,會取一個緩存對象,所以 a和b對象是同一個當然是true,第二個180超出范圍了,就會new一個新的Integer對象,內存地址肯定不一樣
那么最后一題,new Integer(100)實際上是直接自己new了對象,沒有用到裝箱,不過我想一般也沒人這么用吧···
4:總結
其實java中很多設計的小細節,小問題都包含了設計者們的智慧和心血,我們在看這些面試小問題的時候,應該仔細琢磨琢磨為什么這么設計,然后自己在實際的工作中也可以去運用這些巧妙的設計和知識!!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今日校园app如何完成校内认证
- 下一篇: oracle全角字符转半角,Oracle