我是靠谱客的博主 迅速凉面,最近开发中收集的这篇文章主要介绍Integer和int类型值比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天复习时,遇到了Integer类型与int类型的值比较,就写了一段代码来测试一下结果:

public class Test9 {
    public static void main(String[] args) {
        Integer i01 = 12;  
        int i02 = 12;//基本数据类型
        Integer i03 = Integer.valueOf(12);//此处就相当于是Integer i03 =12;
        Integer i04 = new Integer(12);

        System.out.println(i01==i02);//true
        System.out.println(i03==i04);//false
        System.out.println(i01==i04);//false
        System.out.println(i02==i04);//true
        System.out.println(i01==i03);//true
        System.out.println(i02==i03);//true
    }
}

下面我们就来一一说下这些结果的原理吧:
(1)

 System.out.println(i01==i02);//true

Integer i01 = 12;
int i02 = 12;
Integer属于包装类,int属于基本数据类型;
只要Integer和int类型的值进行 == 比较,就会将Integer包装类拆箱为int类型,
所以当进行 i01==i02比较时,就相当于两个int类型的值进行比较;
基本数据类型与基本数据类型进行比较,就是比较值的内容;

(2)

System.out.println(i03==i04);//false

Integer i03 = Integer.valueOf(12); 此处就相当于是Integer i03 =12;
Integer i04 = new Integer(12);

首先,我们要先明确一件事:
对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象;
i03和i04都是Integer对象,两个Integer对象进行比较;
i03是一个Integer对象,因为i03是用直接赋值法产生的对象,它会将该对象放入IntegerCache.cache中,
i04是使用new产生的对象,会重新创建一个堆空间,不会复用IntegerCache.cache中的对象,与 String的直接赋值法创建对象和使用new创建对象一样的原理;

所以i03==i04的结果为false;
(3)

  System.out.println(i01==i04);//false

Integer i01 = 12;
Integer i04 = new Integer(12);
该原理与(2)一样;

(4)

 System.out.println(i02==i04);//true

int i02 = 12;
Integer i04 = new Integer(12);
只要Integer(不管是直接赋值法还是new的)和int类型的值进行 == 比较,就会将Integer包装类拆箱为int类型,与(1)一样;
(5)

 System.out.println(i01==i03);//true

Integer i01 = 12;
Integer i03 = Integer.valueOf(12);相当于 Integer i03=12;

两个Integer类型进行比较,当创建i01对象时,会将该对象放入IntegerCache.cache中,当创建i03时,因为不是new创建的,所以会引用IntegerCache.cache中的i01对象,所以i01和i03是指向堆中的同一个对象;
所以结果为true;
(6)

  System.out.println(i02==i03);//true

int i02 = 12;//基本数据类型
Integer i03 = Integer.valueOf(12);//此处就相当于是Integer i03 =12;
原理和(1)相同;

综上所述:
(1)对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象;

(2)只要Integer(不管是直接赋值法还是new的)和int类型的值进行 == 比较,就会将Integer包装类拆箱为int类型;

最后

以上就是迅速凉面为你收集整理的Integer和int类型值比较的全部内容,希望文章能够帮你解决Integer和int类型值比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部