亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中Integer類型值相等判斷方法

 更新時間:2021年02月04日 09:52:37   作者:渣渣小碼渣  
這篇文章主要給大家介紹了關于Java中Integer類型值相等判斷的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

背景

本周開發(fā)中遇到一個很低級的問題,Integer包裝類的相等判斷,包裝類與基本數(shù)據(jù)類型的區(qū)別,應該大多數(shù)人在面試中經(jīng)常被問到,但是有的時候大家都會煩這些看起來沒啥用的東西,面試前還需要去熟悉,博主之前也是這樣認為的,但是平時看一些理論性的東西,在方案探討或者可行性分析時是很必要的,廢話不多少,看看這個問題吧

事故現(xiàn)場

public static void main(String[] args) {
 Integer a =127;
 Integer b = 127;
 Integer c = 128;
 Integer d = 128;
 Integer e = 129;
 Integer f = 129;

 System.out.println(a==b); //true
 System.out.println(c==d);//false
 System.out.println(e==f);//false
 System.out.println(a.equals(b));//true
 System.out.println(c.equals(d));//true
 System.out.println(e.equals(f));//true
 }

分析原因

上面例子中可以看到127的比較使用==是可以的,128和129就不可以,這種情況去看看Integer是怎么處理的。
打開Integer類全局搜索一下127這個數(shù)字,為啥要搜這個127,因為127是可以的,128就不行,Integer肯定是對127做了特殊處理,搜了一下之后,果然有發(fā)現(xiàn)這個數(shù)字都集中在一個叫做IntegerCache內部類中,代碼如下:

/**
 * Cache to support the object identity semantics of autoboxing for values between
 * -128 and 127 (inclusive) as required by JLS.
 *
 * The cache is initialized on first usage. The size of the cache
 * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
 * During VM initialization, java.lang.Integer.IntegerCache.high property
 * may be set and saved in the private system properties in the
 * sun.misc.VM class.
 */
private static class IntegerCache {
 static final int low = -128;
 static final int high;
 static final Integer cache[];

 static {
  // high value may be configured by property
  int h = 127;
  String integerCacheHighPropValue =
  sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
  if (integerCacheHighPropValue != null) {
  try {
   int i = parseInt(integerCacheHighPropValue);
   i = Math.max(i, 127);
   // Maximum array size is Integer.MAX_VALUE
   h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
  } catch( NumberFormatException nfe) {
   // If the property cannot be parsed into an int, ignore it.
  }
  }
  high = h;

  cache = new Integer[(high - low) + 1];
  int j = low;
  for(int k = 0; k < cache.length; k++)
  cache[k] = new Integer(j++);

  // range [-128, 127] must be interned (JLS7 5.1.7)
  assert IntegerCache.high >= 127;
 }

 private IntegerCache() {}
 }

看這個內部類的描述翻譯過來為:

按照java語義規(guī)范要求,緩存以支持值在-128到127(包含)范圍內的自動裝箱對象的初始化
緩存在第一次使用時初始化,緩存的大小由選項{@code -XX:AutoBoxCacheMax=<size>}控制,在虛擬機初始化期間,java.lang.Integer.IntegerCache.high參數(shù)或被復制并且保存在sun.misc.VM類的私有系統(tǒng)變量中

通俗的來說就是,在-128到127的范圍內,Integer不對創(chuàng)建對象,而是直接取系統(tǒng)緩存中的變量數(shù)據(jù)。

解決

針對包裝類最好全部使用equals進行判斷,Integer得equals方法如下:

public boolean equals(Object obj) {
 if (obj instanceof Integer) {
  return value == ((Integer)obj).intValue();
 }
 return false;
 }

判斷類型后,將其裝換成int值進行大小的判斷,并返回結果

反思

一些理論雖然平時不是很有,但是如果對理論理解不到位,出現(xiàn)理解偏差,這種情況下產(chǎn)生的問題,一般走查代碼是很難排查出問題的。

總結

到此這篇關于Java中Integer類型值相等判斷方法的文章就介紹到這了,更多相關Java Integer類型值相等判斷內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java連接mysql數(shù)據(jù)庫代碼實例程序

    Java連接mysql數(shù)據(jù)庫代碼實例程序

    這篇文章主要介紹了java連接mysql數(shù)據(jù)庫代碼實例程序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 使用jenkins部署springboot項目的方法步驟

    使用jenkins部署springboot項目的方法步驟

    這篇文章主要介紹了使用jenkins部署springboot項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • spring?cloud?eureka?服務啟動失敗的原因分析及解決方法

    spring?cloud?eureka?服務啟動失敗的原因分析及解決方法

    這篇文章主要介紹了spring?cloud?eureka?服務啟動失敗的原因解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Spring Boot利用Thymeleaf發(fā)送Email的方法教程

    Spring Boot利用Thymeleaf發(fā)送Email的方法教程

    spring Boot默認就是使用thymeleaf模板引擎的,下面這篇文章主要給大家介紹了關于在Spring Boot中利用Thymeleaf發(fā)送Email的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • Java實現(xiàn)按權重隨機數(shù)

    Java實現(xiàn)按權重隨機數(shù)

    這篇文章主要介紹了Java實現(xiàn)按權重隨機數(shù),本文給出了提出問題、分析問題、解決問題三個步驟,需要的朋友可以參考下
    2015-04-04
  • Spring中的BeanFactory工廠詳細解析

    Spring中的BeanFactory工廠詳細解析

    這篇文章主要介紹了Spring中的BeanFactory工廠詳細解析,Spring的本質是一個bean工廠(beanFactory)或者說bean容器,它按照我們的要求,生產(chǎn)我們需要的各種各樣的bean,提供給我們使用,需要的朋友可以參考下
    2023-12-12
  • 詳解Spring Boot中如何自定義SpringMVC配置

    詳解Spring Boot中如何自定義SpringMVC配置

    這篇文章主要給大家介紹了關于Spring Boot中如何自定義SpringMVC配置的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

    SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

    這篇文章主要介紹了SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • java實現(xiàn)登錄案例

    java實現(xiàn)登錄案例

    這篇文章主要為大家詳細介紹了java實現(xiàn)登錄案例的相關代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • springboot項目使用nohup將日志指定輸出文件過大問題及解決辦法

    springboot項目使用nohup將日志指定輸出文件過大問題及解決辦法

    在Spring Boot項目中,使用nohup命令重定向日志輸出到文件可能會使日志文件過大,文章介紹了兩種解決方法:一是創(chuàng)建腳本直接清除日志文件,二是創(chuàng)建腳本保留部分日志內容,并將這些腳本加入定時任務中,這可以有效控制日志文件的大小,避免占用過多磁盤空間
    2024-10-10

最新評論