我是靠谱客的博主 漂亮蚂蚁,这篇文章主要介绍Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题),现在分享给大家,希望可以做个参考。

Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题):


1、先看下面的例子:


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 ");
        }
        
    }
}

运行结果:

run:
i1 == i2
i3 != i4 
成功构建 (总时间: 1 秒)


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

原因在于,在进行自动拆装箱时,编译器会使用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()来实现。


转载自:点击打开链接



package com.zp.demo;

public class Demo {
	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		Integer a=156;
		Integer b=156;
		System.out.println(a==b);//false
		System.out.println(a.equals(b));//true
		
		String str="456";
		int num=Integer.parseInt(str);//字符串转为int类型
		System.out.println(num);
		String str1=num+"";//int类型转为字符串
		String str2=String.valueOf(num);//int类型转为字符串
		Integer num2=new Integer(10);//自动装箱
		//自动拆箱
		int num3=num2;//jdk1.5及以上可以自动转换,基本类型和包装类型之间
		
		print(3f);//Integer和Double之间不会转换,故此参数不可为int类型
	    
		Double num4=new Double(12);
		double num5=num4;	
	}

	public static void print(Float f){
		System.out.println(f);
	}
}


最后

以上就是漂亮蚂蚁最近收集整理的关于Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)的全部内容,更多相关Integer内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部