五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

「Java面試」Integer a1=100 Integer a2=100,a1==a2?的運(yùn)行結(jié)果?

2023-03-07 16:58 作者:兩年半的java練習(xí)生  | 我要投稿

考察目的

這個(gè)問題主要考察Java基礎(chǔ)知識(shí),涉及到的知識(shí)點(diǎn)還挺多的。

比如,==號(hào)表示的內(nèi)存地址匹配、裝箱拆箱、Integer內(nèi)部內(nèi)部的設(shè)計(jì)原理。

大部分同學(xué)能夠熟練使用Integer,但是不一定去了解過原理,但是作為一個(gè)3年以上的開發(fā)。

對(duì)于Java基礎(chǔ)必須要知其然還得知其所以然。


問題分析

按照大家對(duì)于Java基礎(chǔ)的認(rèn)知,兩個(gè)獨(dú)立的對(duì)象用==進(jìn)行比較,是比較兩個(gè)對(duì)象的內(nèi)存地址。

那得到的結(jié)果必然是false。但是在這個(gè)場景中,得到的結(jié)果是true。

為什么呢?

首先, Integer a1=100, 把一個(gè)int數(shù)字賦值給一個(gè)封裝類型,Java會(huì)默認(rèn)進(jìn)行裝箱操作,也就是調(diào)用Integer.valueOf()方法,把數(shù)字100包裝成封裝類型Integer。

其次,在Integer內(nèi)部設(shè)計(jì)中,用到了享元模式的設(shè)計(jì),享元模式的核心思想是通過復(fù)用對(duì)象,減少對(duì)象的創(chuàng)建數(shù)量,從而減少內(nèi)存占用和提升性能。

Integer內(nèi)部維護(hù)了一個(gè)IntegerCache,它緩存了-128到127這個(gè)區(qū)間的數(shù)值對(duì)應(yīng)的Integer類型。

一旦程序調(diào)用valueOf 方法,如果數(shù)字是在-128 到 127 之間就直接在cache緩存數(shù)組中去取Integer對(duì)象。

否則,就會(huì)創(chuàng)建一個(gè)新的對(duì)象。

所以,對(duì)于這個(gè)面試題來說,兩個(gè)Integer對(duì)象,因?yàn)橹刀际?00,并且默認(rèn)通過裝箱機(jī)制調(diào)用了valueOf方法。

從IntegerCache中拿到了兩個(gè)完全相同的Integer實(shí)例。

因此用等號(hào)比較得到的結(jié)果必然是true。


高手:

a1==a2的執(zhí)行結(jié)果是true

原因是Integer內(nèi)部用到了享元模式的設(shè)計(jì),針對(duì)-128到127之間的數(shù)字做了緩存。

使用Integer a1=100這個(gè)方式賦值時(shí),Java默認(rèn)會(huì)通過valueOf對(duì)100這個(gè)數(shù)字進(jìn)行裝箱操作,從而觸發(fā)了緩存機(jī)制,使得a1和a2指向了同一個(gè)Integer地址空間。

總結(jié)

注意,這個(gè)基礎(chǔ)知識(shí)非常重要,如果有些同學(xué)在工作中直接把兩個(gè)Integer封裝類型用等號(hào)去比較,就有可能導(dǎo)致生產(chǎn)故障。

所以大家在寫程序的時(shí)候,一定要對(duì)用到的api和技術(shù)框架的實(shí)現(xiàn)有一定的了解。

不僅僅是為了面試,而是為了提升編碼和架構(gòu)設(shè)計(jì)能力。

今天的文章就到這里了,喜歡我作品的同學(xué)記得三連一下哦!



「Java面試」Integer a1=100 Integer a2=100,a1==a2?的運(yùn)行結(jié)果?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
正安县| 新龙县| 建德市| 青川县| 陇南市| 新闻| 慈利县| 陆丰市| 郁南县| 洪雅县| 腾冲县| 拉孜县| 天全县| 徐闻县| 武汉市| 应城市| 镇江市| 邓州市| 阜宁县| 阳谷县| 康平县| 太白县| 永定县| 禹州市| 肃宁县| 合江县| 樟树市| 濮阳县| 雷波县| 怀远县| 太和县| 静安区| 卓资县| 吉首市| 多伦县| 仙游县| 兴安盟| 交口县| 广水市| 会宁县| 柘荣县|