• 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()来实现。

  • 相关阅读:
    Dolls
    无题II hdu 2236(二分枚举区间)
    Cyclic Nacklace
    剪花布条
    Oulipo
    最短路
    Bzoj3211花神游历各国
    Zjoi2010排列计数Perm
    Zjoi2011看电影(movie)
    关于一次同余方程的一类解法(exgcd,CRT,exCRT)
  • 原文地址:https://www.cnblogs.com/fuyuanming/p/5650221.html
Copyright © 2020-2023  润新知