Java基础知识【int 和 Integer】

导读:本篇文章讲解 Java基础知识【int 和 Integer】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一,数据类型区别

我们知道java中由两种数据类型,即基本类型和对象类型,int就是基本数据类型,而Integer是一个class,也习惯把Integer叫做int的包装类。

二,声明或实例化时区别

基本类型int在使用时可以在声明时直接初始化,如int a=0;而Integer作为一个class肯定要通过其构造方法来实例化啦,如:Integer i=new Integer(0);

三,默认值不同

int的默认值是0,而Integer的默认值是null

四,内存中存储的方式不同

int在内存中存储的是数据值,而Integer实际存储的是对象的引用,当new一个Integer时实际上是生成一个指针指向此对象;

五:变量的比较方式不同

int 可以使用 == 来对比两个变量是否相等,而integer一定要使用equals来比较两个变量是否相等

六、 Integer、new Integer()和int的比较

1、两个new Integer()变量比较,永远是false

//        1、两个new Integer()变量比较,永远是false
        Integer i1 = new Integer(100);
        Integer j1 = new Integer(100);
        System.out.println(i1 == j1);
        System.out.println("===============");

因为引用数据类型,new 创建将会在堆内存中地址值

==进行比较引用数据类型比较的是地址值

2,Integer变量和new Integer()变量比较,永远为false

//        2、Integer变量 和 new Integer() 变量比较 ,永远为 false
        Integer i2 = 100;
        Integer j2 = new Integer(100);
        System.out.println(i2 == j2);
        System.out.println("===============");

因为:i2指向的是常量池中的对象的地址值,j2指向的是堆内存中的地址值,地址值不同比较为false

3,两个Integer 变量比较,如果两个变量的值在区间-128到127 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。

        Integer i3 = 127;
        Integer j3 = 127;
        Integer i33 = 128;
        Integer j33 = 128;
        System.out.println(i3 == j3);
        System.out.println(i33 == j33);
        System.out.println("================");

分析:

Integer i3 = 127在编译时,会翻译成为 Integer i = Integer.valueOf(127),而 java 对 Integer类型的 valueOf 的定义如下

 Java基础知识【int 和 Integer】

 

 public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
java对于-128到127之间的数,会进行缓存。
所以 Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。

4,int变量与 Integer、new Integer()比较时,只要两个的值是相等的,则为true.

Integer i4 = new Integer(100); //自动拆箱为 int i4 = 100 ,相当于两个int的比较
        int j4 = 100;
        System.out.println(i4 == j4);//true

Java的自动拆包机制啦,当一个基本类型和一个包装类型比较时,包装类型会被自动拆包进行比较。

小结:

Integer 是 int 的包装类,它们的区别主要体现在 5 个方面:数据类型不同、默认值不同、内存中存储的方式不同、实例化方式不同以及变量的比较方式不同。

包装类的存在解决了基本数据类型无法做到的事情泛型类型参数、序列化、类型转换、高频区间数据缓存等问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120785.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!