自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...
1:前言
相信大家都在面試中都被問(wèn)到過(guò)一個(gè)問(wèn)題,這個(gè)問(wèn)題也是近年來(lái)面試官刁難人比較常見的一個(gè)問(wèn)題,所以也被大家所熟知了,本質(zhì)上也很簡(jiǎn)單,但是也是非常基礎(chǔ)的一個(gè)題目。
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
Integer a = 180;
Integer b = 180;
System.out.println(a == b);
復(fù)制代碼
題目也就是讓你回答一下上面的輸出情況,顯而易見第一個(gè)是true,第二個(gè)是false,這個(gè)大家應(yīng)該都知道了
2:自動(dòng)裝箱和拆箱
我們都知道!java的核心思想是:萬(wàn)物皆對(duì)象,但是,實(shí)際上為了平時(shí)寫代碼的便利性,還是保留了8個(gè)基礎(chǔ)數(shù)據(jù)類型:byte, short, char, int, long, float, double 和 boolean
那么問(wèn)題來(lái)了:下面這種情況怎么操作
//a是Integer對(duì)象類型,100是基礎(chǔ)int類型
Integer a = 100;
復(fù)制代碼
這個(gè)時(shí)候我們聰明的編譯器就會(huì)調(diào)用valueOf去做裝箱為對(duì)象
自動(dòng)拆箱就正好反過(guò)來(lái)使用對(duì)象的intValue()方法區(qū)拆箱為基礎(chǔ)數(shù)據(jù)類型
3:解答上面的 == 不一樣的問(wèn)題
那么我們?cè)跍毓室幌律厦婺莻€(gè)問(wèn)題好了,額外我再加一個(gè)干擾項(xiàng)
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
復(fù)制代碼
所以我們要先理解==的意思,基礎(chǔ)類型==是比較值是否相等,對(duì)象類型是比較內(nèi)存地址是否相同
那么我們結(jié)合Integer.valueOf()代碼就可以知道,我們?cè)谘b箱的時(shí)候會(huì)進(jìn)行一次緩存判斷,在[-128,127]范圍內(nèi)的時(shí)候,會(huì)取一個(gè)緩存對(duì)象,所以 a和b對(duì)象是同一個(gè)當(dāng)然是true,第二個(gè)180超出范圍了,就會(huì)new一個(gè)新的Integer對(duì)象,內(nèi)存地址肯定不一樣
那么最后一題,new Integer(100)實(shí)際上是直接自己new了對(duì)象,沒(méi)有用到裝箱,不過(guò)我想一般也沒(méi)人這么用吧···
4:總結(jié)
其實(shí)java中很多設(shè)計(jì)的小細(xì)節(jié),小問(wèn)題都包含了設(shè)計(jì)者們的智慧和心血,我們?cè)诳催@些面試小問(wèn)題的時(shí)候,應(yīng)該仔細(xì)琢磨琢磨為什么這么設(shè)計(jì),然后自己在實(shí)際的工作中也可以去運(yùn)用這些巧妙的設(shè)計(jì)和知識(shí)!!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 今日校园app如何完成校内认证
- 下一篇: iOS 15 手动更改“人物”相册方法教