国产另类ts人妖一区二区_欧美肥老太做爰视频_快穿高h肉_国产欧美综合在线

當(dāng)前位置: 首頁 / 技術(shù)干貨 / 正文
好程序員Java培訓(xùn)分享int和Integer的區(qū)別

2020-08-05

Java培訓(xùn)

  好程序員Java培訓(xùn)分享intInteger的區(qū)別,在說intInteger的區(qū)別之前,先要弄清楚兩個問題:

  一、Java基本數(shù)據(jù)類型及其封裝類

  二、Java自動拆箱和自動裝箱

  Java自動拆箱和自動裝箱

  1、自動裝箱

  自動裝箱其實就是將基本數(shù)據(jù)類型轉(zhuǎn)換為引用數(shù)據(jù)類型(對象)

  2、自動拆箱

  自動拆箱其實就是將引用數(shù)據(jù)類型轉(zhuǎn)化為基本數(shù)據(jù)類型

  int Integer的區(qū)別

  分析

  int

  Integer

  int Integer 的區(qū)別

  相同值下的 int Integer 的比較結(jié)果

  分析

  int

  int Java的基本數(shù)據(jù)類型。

  Integer

  Integer 繼承了Object類,是對象類型,是 int 的包裝類。

  int Integer 的區(qū)別

  值的存儲

  int 存儲在棧中

  Integer 對象的引用存儲在棧空間中,對象的數(shù)據(jù)存儲在堆空間中。

  初始化

  int 初始化值為0

  Integer 初始化值為null

  傳參

  int 是值傳遞,棧中的數(shù)據(jù)不可變。

  Integer 對象是引用傳遞,引用不可變,但是引用指向的堆空間地址中的值是可以改變的。

  泛型支持

  泛型不支持int,但是支持Integer

  運算

  int 可以直接做運算,是類的特性。

  Integer 的對象可以調(diào)用該類的方法,但是在拆箱之前不能進行運算,需要轉(zhuǎn)化為基本類型int

  int是基本數(shù)據(jù)類型,Integer是引用數(shù)據(jù)類型;

  int默認值是0Integer默認值是null

  int類型直接存儲數(shù)值,Integer需要實例化對象,指向?qū)ο蟮牡刂贰?/font>

  相同值下的 int Integer 的比較結(jié)果

  兩個通過new生成的變量,結(jié)果為false

  int Integer 的值比較,若兩者的值相等,則為true

  (注意:在比較時,Integer會自動拆箱為int類型,然后再做比較。)

  new 生成的Integer變量 和 非new 生成的Integer變量比較,,結(jié)果為false

  (注意:new 生成的Integer變量的值在堆空間中,非new 生成的Integer變量的值在在常量池中。)

  (注意:非new生成的Integer變量,會先判斷常量池中是否有該對象,若有則共享,若無則在常量池中放入該對象;也叫享元模式,后面再說。)

  兩個非new 生成的Integer對象比較,則結(jié)果為true

  (注意:此處需要一個前提:值的范圍在 -128 ~ 127 之間。

  涉及到Java int Integer 的自動裝箱和拆箱的一種模式:享元模式—flyweight,為了加強對簡單數(shù)字的重復(fù)利用。

  在賦值時,其實是執(zhí)行了IntegervalueOf()方法。

  當(dāng)值在 -128 ~ 127之間時,Java會進行自動裝箱,然后會對值進行緩存,如果下次再有相同的值,會直接在緩存中取出使用。緩存是通過Integer的內(nèi)部類IntegerCache來完成的。

  當(dāng)值超出此范圍,會在堆中new出一個對象來存儲。

  PS:自動裝箱與拆箱是在JDK1.5中出現(xiàn)的。

  )

  內(nèi)部類IntegerCache

  通過此類可以緩存簡單數(shù)字。

  緩存的數(shù)大小可以由 -XXAutoBoxCacheMax = 控制。

  jvm初始化時,Java.lang.Integer.IntegerCache.high屬性可以設(shè)置并保存在私有系統(tǒng)屬性中。

  規(guī)定了low屬性的值:-128

  來看個例子

1

  1a == b 嗎? 廢話,肯定不相等。兩個new出來的對象地址不一樣。

  2c == d 嗎? 這個也是廢話,都是基本數(shù)據(jù)類型的值肯定相等。

  3:現(xiàn)在的關(guān)鍵問題是 e == f 嗎? g == h 嗎?

  答案是:e == f; g != h。為什么會出現(xiàn)這種情況?因為ava在進行編譯時 Integer g = 130會被編譯成 Integer.valueOf(130) ,這個可以通過反編譯class文件看到。而通過Integer源碼可以得出,Integer.valueOf() 方法會在數(shù)值-128~127之間會對Integer進行緩存,不會再重新new一個,所以 e==f ;當(dāng)數(shù)值二大于127或者小于-128的時候則會重新new一個,所以g != h

  IntegervalueOf方法如下

2

  4c == e 嗎, i == j 嗎?

  答案都是相等的。因為封裝類和基本數(shù)據(jù)類型進行比較的時候,Java會自動拆箱,然后比較數(shù)值是 否相等。

  綜上,我們可以得出幾個結(jié)論:

  1、都是封裝類,都是new出來的,肯定不相等。因為對象的內(nèi)存地址不一樣。

  2、都是封裝類,都不是new出來的,如果值在-128~127之間,那就相等,否則不相等。

  3、如果是封裝類和基本類型進行比較,只要數(shù)值相等那就相等,否則就不相等。因為封裝類和基本數(shù)據(jù)類型進行比較的時候會有一個自動拆箱操作。

  4、都是基本數(shù)據(jù)類型,如果數(shù)值相等,那就相等;否則不相等。

好程序員公眾號

  • · 剖析行業(yè)發(fā)展趨勢
  • · 匯聚企業(yè)項目源碼

好程序員開班動態(tài)

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數(shù)據(jù)+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發(fā) <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數(shù)據(jù)分析 <高端班>

    開班時間:2021-07-12(北京)

    預(yù)約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發(fā) <高端班>

    開班時間:2021-07-12(北京)

    預(yù)約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號-5 京公網(wǎng)安備 11010802035720號