zoukankan      html  css  js  c++  java
  • Java中Integer与int对比的一些坑

    Integer与int类型的关系

    Integer是int的包装类,int的默认值是0,而Integer的默认值是null(我们经常在代码中使用的Integer.valueOf() 和xx.intValue()就是自动装箱和拆箱的过程 ),

    需要注意的是Integer里面默认的缓存数字是-128-127

    • IntegerInteger相互比较,数据在-128-127范围内,就会从缓存中拿去数据,比较就相等;如果不在这个范围,就会直接新创建一个Integer对象,使用== 判断的是两个内存的应用地址,所以自然不相等。

    • Integer和int类型相比,在jdk1.5,会自动拆箱,然后比较栈内存中的数据

    int跟int比较

    int数据类型,都是在栈内存中存储,如果这个数字在栈内存中存在就会直接指向这个内存地址,如果不存在,就会重新开辟内存空间,所以int和int类型的比较,相同的值不会存在内存不等的情况

    八个基本数据类型不能看作对象(这点很特殊),存放在栈中。栈内操作速度快,创建销毁很容易

    int跟Integer比较

    会自动拆箱,变成int与int对比

    Integer跟Integer比较

    上面提到Integer里面会有缓存数字

    • 在-128~127的范围内,==会相等,获取的cache的地址

    • 不在上述范围内,会去new一个对象对比,直接new对象的话,肯定不等于

    实战

    	int a = 200;
    	Integer b = 200;
    	System.out.println(a == b);//会自动拆箱
    	Integer c = 100;
    	Integer d = 100;
    	System.out.println(c == d);//在Integer缓存范围内,对比的是值
    	c = 200;
    	d = 200;
    	System.out.println(c == d);//超出Integer缓存范围,对比的对象的内存地址
    

    输出结果:

    true
    true
    false
    
  • 相关阅读:
    ASP.NET 父页面取子页面的值 TC
    C#代码规范 TC
    [Serializable]在C#中的作用NET 中的对象序列化 TC
    ADO.NET连接数据库 TC
    ASp.net 剖析三层架构 TC
    转载反编译Silverlight项目 TC
    ASP.NET FileUpload上传图片方法并解决上传文件大小 TC
    C#控件一览表 前所未有的震撼(太详细了) TC
    ASP.NET C#上传图片生成缩略图 TC
    项目总结 TC
  • 原文地址:https://www.cnblogs.com/wangchy0927/p/11694063.html
Copyright © 2011-2022 走看看