zoukankan      html  css  js  c++  java
  • Integer比较值的时候小心使用

    package integerdemo;  
       
    public class IntegerDemo {  
        
        public static void main(String[] args) {  
           //-128--127之间  
            Integer i1 = 100;  
            Integer i2 = 100;  
              
            if( i1 == i2){  
                System.out.println("i1 == i2");  
            }else{  
                System.out.println("i1 != i2 ");  
            }  
              
           //大于127    
            Integer i3 = 200;  
            Integer i4 = 200;  
              
            if( i3 == i4){  
                System.out.println("i3 == i4");  
            }else{  
                System.out.println("i3 != i4 ");  
            }  
              
        }  
    }  
    

      运行结果:

    i1 == i2  
    i3 != i4   
    

      

    以上是靠整型数的自动拆装箱实现的,而两者的结果却不相同。

    原因在于,在进行自动拆装箱时,编译器会使用Integer.valueof()来创建Integer实例。

    2、以下是Integer.valueof()的源代码:

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

    简单地解释这段代码,就是如果传入的int在IntegerCache.low和IntegerCache.high之间,那就尝试看前面的缓存中有没有打过包的相同的值,如果有就直接返回,否则就创建一个Integer实例。IntegerCache.low 默认是-128;IntegerCache.high默认是127.

    注:如果要比较两个对象的内容是否相同,尽量不使用== 或者!= 来比较,可以使用equal()来实现。

  • 相关阅读:
    IntelliJ IDEA导包快捷键
    maven命令创建web骨架项目
    v2.0版本小程序开发心得(代码之外)
    装饰器模式
    闭包
    git diff的文字说明
    WSGI和CGI
    word-wrap、white-space和word break的区别
    Javascript中正则的 match、test、exec使用方法和区别
    Git 内部原理
  • 原文地址:https://www.cnblogs.com/fuyuanming/p/5650221.html
Copyright © 2011-2022 走看看