日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Integer大小比较的问题

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Integer大小比较的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉載自:http://www.blogjava.net/zhangyuan/archive/2010/07/24/327011.html

昨天跟朋友一起吃飯,他說到兩個Integer類型值比較是否相等的問題。經(jīng)理也在這里把java的Integer值比較的問題拿出來說一說。因為在面試的時候這個是經(jīng)常遇到的問題。
首先給大家看一個例子:

public class Test {/*** 關于Integer大小比較問題* @author 經(jīng)理*/public static void main(String[] args) {Integer a = 10;Integer b = 10;System.out.println("a==b : " + String.valueOf(a==b));System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));} }

運行一下,在控制臺得到的結果是這樣的

a==b : true a.equals(b) : true

但是當我們變換一下值

public class Test {/*** 關于Integer大小比較問題* @author 經(jīng)理*/public static void main(String[] args) {Integer a = 1000;Integer b = 1000;System.out.println("a==b : " + String.valueOf(a==b));System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));} }

運行一下,控制臺的結果又是:

a==b : false a.equals(b) : true

這是什么原因呢?我當時也有點犯糊涂。有點沖動就直接開源碼看了。
實際上在我們用Integer a = 數(shù)字;來賦值的時候Integer這個類是調用的public static Integer valueOf(int i)這個方法。

public static Integer valueOf(int i) {if(i >= -128 && i <= IntegerCache.high)return IntegerCache.cache[i + 128];elsereturn new Integer(i);}

我們來看看ValueOf(int i)的代碼,可以發(fā)現(xiàn)他對傳入?yún)?shù)i做了一個if判斷。在-128<=i<=127的時候是直接用的int原始數(shù)據(jù)類型,而超出了這個范圍則是new了一個對象。我們知道”==”符號在比較對象的時候是比較的內(nèi)存地址,而對于原始數(shù)據(jù)類型是直接比對的數(shù)據(jù)值。那么這個問題就解決了。
至于為什么用int型的時候值會在-128<=i<=127范圍呢呢?我們知道八位二進制的表示的范圍正好就是-128到127。大概就是因為這吧。

把平時出現(xiàn)的問題記錄下來,自己就可以一點一點進步了。

總結

以上是生活随笔為你收集整理的关于Integer大小比较的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。