Integer与int有什么区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Integer和int的区别
Integer的默认初始值是null,而int的初始值是int,也就是说Integer能够区分出未赋值和值为0的区别,而int却不能表达出未赋值的情况,所以int不适合作为web层的表单数据填写。(例如:一个学生参加考试且成绩为0,和没参加考试成绩为null)
Integer是类,自带很多方法供使用,而int只能做一些基本的±*/=的操作
Integer变量必须先实例化,int变量直接使用
在说明Integer的时候有几个小知识点提一下:
拆箱和装箱
什么时候拆箱:基本数据类型和引用数据类型做运算时什么时候装箱:基本数据类型赋值给引用数据类型时
“==”和“equals()”
“==”:在比较基本数据类型时比较的是数值,比较引用数据类型时比较的是对象堆内存地址equals():在Object类中是通过“==”来比较的,但大多时候,我们会将其进行重写
在Integer类中,“==”用来比较对象地址是否相同,而equals()被重写,他会先判断参数中对象是否为Integer类型,如果是则判断值是否相同。
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
几点说明
Integer变量和int变量比较值时,只要值是相等的,结果就为true(因为Java会自动拆箱,将Integer拆为int,在进行比较)
Integer a = new Integer(1); int b = 1; System.out.println(a == b);//true
两个通过new生成的Integer变量是永远不相等的(因为new生成的是两个新对象,内存地址不同)
Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(a == b);//false
两个通过非new产生的Integer变量也是不相等的(因为非new产生的Integer变量指向Java常量池中的对象,而new产生的变量指向堆中新建对象,他俩所在的内存地址不同)
Integer a = new Integer(1); Integer b = 1; System.out.println(a == b);//false
两个非new产生的Integer变量比较:当值在-128~127之间时,结果为true,当值在此区间外结果为false(因为Integer常量池的存储范围是[-128,127],在此范围内是直接存储于常量池的,都指向同一个地址。在此范围外的数需要通过堆内存创建一个新对象。比如Integer a=1会将1写入缓存中,下次再写Integer b=1时会直接从缓存中去,不用new了,所以取到的地址也是相同的)
Integer a = 1; Integer b = 1; System.out.println(a == b);//true Integer a = 129; Integer b = 129; System.out.println(a == b);//false
关于Integer与int有什么区别问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。