中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么Java 中"1000==1000"為false而"100==100"為true

發布時間:2021-10-12 14:53:12 來源:億速云 閱讀:106 作者:iii 欄目:編程語言

這篇文章主要介紹“為什么Java 中"1000==1000"為false而"100==100"為true”,在日常操作中,相信很多人在為什么Java 中"1000==1000"為false而"100==100"為true問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”為什么Java 中"1000==1000"為false而"100==100"為true”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

 為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

public static void main(String[] args) {      Integer integer1 = 100;     Integer integer2 = 100;      System.out.println(integer1 == integer2);       Integer integer3 = 1000;     Integer integer4 = 1000;      System.out.println(integer3 == integer4); }

以上代碼,輸出結果為:

true false
為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

動拆裝箱

首先,我們在介紹自動拆裝箱之前,修改一下上面的代碼,把變量的類型從Integer改為int,重新執行以上代碼:

public static void main(String[] args) {      int integer1 = 100;     int integer2 = 100;      System.out.println(integer1 == integer2);       int integer3 = 1000;     int integer4 = 1000;      System.out.println(integer3 == integer4); }

輸出結果為:

true true

那么,int和Integer有啥區別呢?

int是基本數據類型,而Integer是包裝類。

因為Java是一種面向對象語言,很多地方都需要使用對象而不是基本數據類型,如在集合中元素必須是對象類型的。

所以,Java種就給所有基本類型提供了對應的包裝類,而int對應的包裝類就是Integer。

有了基本數據類型和包裝類,就需要在他們之間進行轉換,把基本類型轉成包裝類的過程就做裝箱,反之,叫做拆箱。

在Java SE5中,為了減少開發人員的工作,Java提供了自動拆箱與自動裝箱功能。

自動裝箱: 就是將基本數據類型自動轉換成對應的包裝類。

自動拆箱:就是將包裝類自動轉換成對應的基本數據類型。

在我們最開始的例子中,我們使用Integer integer1 = 100;定義并初始化一個變量。

這時候就涉及到一次自動裝箱。因為100是基本類型int,而需要把他賦值給包裝類型對象integer1,這時候就進行了一次自動裝箱。

Integer integer1 = 100; 其實是 Integer i = new  Integer(10);的簡化寫法,就是因為Java中提供了自動裝箱的功能。

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

自動裝箱的緩存機制

Java SE的自動拆裝箱還提供了一個和緩存有關的功能。

為了節省內存和提升性能,Java給多個包裝類型提供了緩存機制,可以在自動裝箱過程中,把一部分對象放到緩存中,實現了對象的復用。

如Byte、Short、Integer、Long、Character等都支持緩存。

對于Integer,其內部有一個IntegerCache的內部類。他會對整數值在-128 至  +127期間的對象進行緩存。這個緩存會在Integer類第一次被使用的時候被初始化出來。以后,就可以使用緩存中包含的實例對象,而不是創建一個新的實例(在自動裝箱的情況下)。

也就是說,當我們對一個值在-128 至 +127期間的數字進行自動裝箱時,并不是每次都新建一個對象,而是直接從緩存中取出一個緩存對象。

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

==比較的是什么

知道了自動裝箱和其緩存機制,那么我們接下來看一下,當我們代碼中使用==比較兩個對象的時候,比較的到底是什么?

很多人會認為,對于整數類型,比較的當然是整數的值了,但是其實不是的。

Java中的==,比較的時對象的地址,如果兩個對象的地址是同一個,那么就返回true,否則返回false。

所以,因為有了自動裝箱、因為有了緩存機制,因為==比較的是地址。

所以,當對-128 至  +127中的兩個Interger進行比較的時候,因為都是從緩存中取出來的同一個對象,所以對象的地址是一樣的,就返回了true。

而對于1000,因為不在緩存范圍內,所以每次會新建對象,所以就會返回false。

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

但是需要注意的是,只有在自動裝箱的時候才會有緩存機制,在構造函數中是和緩存無關的,如以下代碼:

Integer integer1 = new Integer(100); Integer integer2 = new Integer(100);  System.out.println(integer1 == integer2);

輸出結果為

false

為什么Java 中"1000==1000"為false而"100==100"為true

為什么Java 中"1000==1000"為false而"100==100"為true

到此,關于“為什么Java 中"1000==1000"為false而"100==100"為true”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马关县| 万山特区| 临江市| 贵溪市| 阿拉善左旗| 化德县| 卓资县| 长丰县| 阿拉善盟| 密云县| 苗栗县| 剑阁县| 南漳县| 蛟河市| 客服| 花垣县| 盘山县| 灵川县| 乐清市| 岳阳县| 太保市| 合肥市| 甘洛县| 蒙自县| 论坛| 焉耆| 晋城| 新宁县| 三亚市| 库伦旗| 来安县| 汝阳县| 蚌埠市| 商河县| 中阳县| 孝义市| 昂仁县| 洛宁县| 车致| 庐江县| 台南市|