无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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)遵守國家法律
收藏| 屏东市| 长兴县| 韶关市| 东乡县| 郁南县| 浪卡子县| 天气| 冷水江市| 长乐市| 治县。| 湖南省| 田林县| 金堂县| 饶平县| 陵川县| 黑水县| 铅山县| 渭源县| 穆棱市| 共和县| 焉耆| 临桂县| 轮台县| 封丘县| 涡阳县| 金华市| 永吉县| 晴隆县| 游戏| 陇川县| 宽城| 九龙坡区| 阿坝| 谷城县| 南漳县| 永安市| 修水县| 布尔津县| 萨嘎县| 浠水县|