对Java中的 int AND Integer的理解

在Java中Integer类是比较常用的类;

对于Integer i = new Integer(1);

Integer ii = Integer.valueOf(1);

都是得到一个Integer对象,但是Integer.valueOf()的效率高,因为其用到了缓存机制。

-------------------------------------------------------------------------------------------------------------------------------------

例:Integer i0 = Integer.valueOf(59);

Integer i1 = Integer.valueOf(59);

System.out.println(i0==i1);

返回的结果为true

注:当整数范围在-128<i<=127时,Integer.valueOf返回的是同一个对象。

----------------------------------------------------------------------------------------------------------------------------------------

Intrger i2 = new Integer(59);

Intrger i3 = new Integer(59);

System.out.println(i2==i3);

返回的结果为false,

注:new Integer()返回的是不同的对象,

----------------------------------------------------------------------------------------------------------------------------------------

  Integer m1 = Integer.valueOf(59);

Integer n1 = new Integer(59);

System.out.println(m1==n1);

返回的结果为false,

----------------------------------------------------------------------------------------------------------------------------------------

那么:Integer i=100,i1=100;Integer i2=188,i3=188;请问i2==i3么?i==i1么?

 IntegerInteger间的比较从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,但是超过byte范围还是会新建对象。

综上,i==i1返回结果为true,i2==i3返回结果为false。自动拆箱机制,基本数据类型和对象比较的时候,对象会自动拆箱为基本数据类型再比较,比较的就是里面的值而不是地址,

例: Integer m = new Integer(1);

int n = 1;

System.out.println(m==n);

返回的结果为true;

对象m经过拆箱过程先变成int m = 1;

----------------------------------------------------------------------------------------------------------------------------------------

从String机制来看,返回的结果不应该会是如此才对。==”是判断对象所存的地址,而Integer的哈希码即是括号里面的数值,在判断“==”的时候,对于对象来说是比较两者在内存中的地址,对于一个是int,一个是integer,“==”比较的是数值!因为int是原始数据类型,也叫简单数据类型,而Integer的复杂数据类型,也叫引用数据类型!

例:

	    public static void main(String[] args){
	    	Integer i = new Integer(59);
	    	int i1 = 59;
	    	System.out.println("new Integer and int:"+(i==i1));                 //new Integer and int:true
	    	System.out.println("------------------------------");
	    	Integer i2 = new Integer(59);
	    	Integer i3 = 59;
	    	System.out.println("new Integer(59) and new Integer(59):"+(i==i2)); //new Integer(59) and new Integer(59):false
	    	System.out.println("new Integer and Integer:"+(i2==i3));            //new Integer and Integer:false
	    	System.out.println("------------------------------");
	    	Integer i4 = 59;
	    	System.out.println("Integer and Integer:"+(i3==i4));                //Integer and Integer:true
	    	System.out.println("Integer and int:"+(i1==i4));                    //Integer and int:true
	    	System.out.println("------------------------------");
	    	Integer i0 = Integer.valueOf(59);
	    	Integer ii0 = 59;
	    	Integer i00 = new Integer(59);
	    	System.out.println("Integer.valueof and Integer:"+(i0==ii0));       //Integer.valueof and Integer:true
	    	System.out.println("Integer.valueof and new Integer:"+(i0==i00));   //Integer.valueof and new Integer:false
	    	System.out.println("-------------------------------");
	    	Integer i5 = Integer.valueOf(59);
	    	Integer j = Integer.valueOf(200);
	    	Integer j1 = Integer.valueOf(200);
	    	//在-128到127范围内的Integer.valurOf的比较
	    	System.out.println("Integer.valueOf(59) and Integer.valueOf(59):"+(i0==i5));//Integer.valueOf(59) and Integer.valueOf(59):true
	    	//不在-128到127范围内的Integer.valurOf的比较
	    	System.out.println("Integer.valueOf(200) and Integer.valueOf(200):"+(j==j1));//Integer.valueOf(200) and Integer.valueOf(200):false
	    }

参考xxqi1229的专栏--java基础------new Integer(1)和Integer.valueOf(1)的区别Toni的博客--对java中int与Integer的一些理解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值