最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)遵守國家法律
吉林省| 定州市| 临沂市| 绵竹市| 蒲江县| 洛浦县| 吉水县| 信阳市| 沁源县| 雅安市| 东安县| 乌拉特前旗| 通江县| 溧水县| 天水市| 鄢陵县| 北辰区| 湄潭县| 清新县| 辽中县| 益阳市| 临沧市| 阳山县| 华蓥市| 合川市| 绍兴县| 建阳市| 奉化市| 张家口市| 莱阳市| 大兴区| 顺义区| 屯门区| 临潭县| 平罗县| 新余市| 钟山县| 那坡县| 洪湖市| 闵行区| 东莞市|