Int和Integer的区别

36 篇文章 0 订阅
订阅专栏

Int和Integer的区别

1、Integer是Int的包装类,Int是八种基本数据类型之一。
2、Integer变量必须实例化以后才可以使用,而Int变量不需要实例化。
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而Int是直接存储数据值。
4、Integer的默认值是null,Int的默认值是0。

Int和Integer的比较(扩展)

先来看一段代码:

public class Test {
    public static void main(String[] args) {

        Integer a = new Integer(10);
        Integer b = new Integer(10);
        System.out.println(a == b);

        Integer c = new Integer(10);
        int d = 10;
        System.out.println(c == d);

        Integer e = new Integer(10);
        Integer f = 10;
        System.out.println(e == f);

        Integer g = 10;
        Integer h = 10;
        System.out.println(g == h);

        Integer i = 128;
        Integer j = 128;
        System.out.println(i == j);

        int k = 10;
        Integer l = 10;
        System.out.println(k == l);

        int m = 128;
        Integer n = 128;
        System.out.println(m == n);

    }

}

输出结果为:
在这里插入图片描述
思考一下为什么?
第一组:

//1、false
        Integer a = new Integer(10);
        Integer b = new Integer(10);
        System.out.println(a == b);

a和b是两个Integer变量,Integer变量实际上是对Integer对象的引用,而new生成的是两个对象,内存地址不同,所以a和b不相等,结果为false。

第二组:

//2、true
        Integer c = new Integer(10);
        int d = 10;
        System.out.println(c == d);

由于包装类Integer和基本数据类型Int在进行比较的时候,Java会自动拆箱为Int(c.intValue(10) == d),然后进行比较,实际上就是两个Int变量的比较,只要两个变量的值是相等的,结果就为true。

第三组:

//3、false
        Integer e = new Integer(10);
        Integer f = 10;
        System.out.println(e == f);

和第二组不同的是, e 和 f 都是Integer变量,区别是非new生成的Integer变量 f 指向的是Java常量池中的对象,new生成的Integer变量指向堆中新建的对象,两者在内存中地址不同,所以结果为false。

第四组:

//4、true
        Integer g = 10;
        Integer h = 10;
        System.out.println(g == h);

对于 g == h,两个Integer类的比较应该用equals,而这里使用==判断地址,结果本应该是false,但打印出来却是true,这是为什么?
首先,直接声明Integer g = 10;的时候,Java自动装箱为Integer g = Integer.valueOf(10),查看Integer类的valueOf方法:

// range [-128, 127] must be interned (JLS7 5.1.7)
// static final int low = -128;
// assert IntegerCache.high >= 127;
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

观察源码可以发现,当 i>=-128并且 i<=127的时候,第一次声明会将 i 的值放入缓存中,第二次直接复用缓存里边已有的对象,而不是重新创建一个Integer对象。这个区间内的Integer值可以直接使用 == 判断,但这个区间外的所有数据,都会在堆上产生,并不会复用已有对象。
这组的 g 和 h 都在这个区间内,所以结果为true。

第五组:

//5、false
        Integer i = 128;
        Integer j = 128;
        System.out.println(i == j);

第五组刚好可以和第四组进行对比,因为 i 和 j 不在那个区间内,所以都是在堆上新产生一个对象,结果为false。

第六组:

//6、true
        int k = 10;
        Integer l = 10;
        System.out.println(k == l);

Integer的自动拆箱功能,k == l.intValue(10),也就是比较两个基本数据类型,结果当然为true。
第七组:

//7、true
        int m = 128;
        Integer n = 128;
        System.out.println(m == n);

和第六组一样的道理,总之Int和Integer比较,无论是否有new,结果都为true,因为Java会把Integer自动拆箱为Int再去比较。

再看一段代码:

public class Test {
    public static void main(String[] args) {

        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;

        Integer e = 321;
        Integer f = 321;

        Long g = 3L;
        Long h = 2L;

        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a + b));
        System.out.println(c.equals((a+b)));
        System.out.println(g == (a+b));
        System.out.println(g.equals(a+b));
        System.out.println(g.equals(a+h));

    }

}

输出结果为:
在这里插入图片描述

  • c == d就是第一个示例中的第四组,结果为true。
  • e == f就是第一个示例中的第五组,结果为false。
  • c == (a + b),由于 a + b 包含了算术运算,Java会进行自动拆箱,==又将 c 自动拆箱,所以比较的是数值是否相等,结果为true。
  • c.equals((a+b)),a 和 b 先各自调用intValue()方法自动拆箱,得到 a + b 的结果后再调用Integer.valueOf()方法自动装箱,再进行equals比较,结果为true。
  • g == (a+b),首先计算a + b,也是先各自调用intValue()方法自动拆箱得到数值,由于 g 是Long类型的,也会自动拆箱为long,==运算符能够将小范围的数据类型转换为大范围的数据类型,也就是把 int 转换为 long,然后把两个long类型的数值进行比较,结果为true。
  • g.equals(a+b),同理a+b会先自动拆箱,然后将结果自动装箱,但是equals 运算符不会进行类型转换,所以是Long.equals(Integer),结果为false。
  • g.equals(a+h),a + h 自动拆箱后是 int + long,运算符 + 进行类型转换,结果为long,long再自动装箱为Long,两个Long进行equals比较,结果为true。
Integerint区别
海米一枚
11-13 5109
1、类型不同:Integer是对象类型,int是基本数据类型。Integerint的包装类。 2、Integer变量需要实例化之后才能使用,int则不需要。 3、Integer的默认值是null,int的默认值是0 4、Integer是对象的引用,当new一个Integer对象时,实际上是生成一个指针指向这个对象;而int则是直接存储数据值。 当intInteger进行比较的时候: ...
intInteger区别,为什么有了int还要有Integer
qq_43133382的博客
07-22 1948
目录intInteger区别intInteger的比较有了int为什么还要有Integer补充:Integer的装箱和拆箱 intInteger区别 int是Java的基本数据类型,长度为32位(4)字节;Integer是Java提供的封装类,在java.lang.Integer包里面。 int默认值为0;而Integer默认值是null。 Integer是对象的引用,必须实例化后才能使用;int则不需要。 new一个Integer实际是生成一个指针指向此对象;而int则是直接存储数据值。 i
intInteger深入分析
weixin_33691817的博客
08-27 200
目录介绍 1.关于intInteger的问题区别分析 2.Integer的值缓存的原理 2.1 Java 5 中引入缓存特性 2.2 Integer类中的IntegerCache类 2.3 其他整型类型的缓存机制 3.理解自动装箱和拆箱 3.1 什么是装箱?什么是拆箱? 3.2 装箱和拆箱是如何实现的 3.3 装箱和拆箱在编程实际中注意点 4.原始类型线程安全问题 4.1 那些类...
一、Java基础知识-1.1数据类型
最新发布
weixin_61769871的博客
08-23 1013
Java面试八股文、Java基础知识、数据类型
intInteger 有什么区别
weixin_46457853的博客
02-06 387
为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型 基本数据类型: boolean,char,byte,short,int,long,float,double 封装类类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 区别Integerint的包装类; int是基本数据类型 Integer变量必须实例化后才能使用;int变量不需要 Integer实际是对象的引用,指向此new的Integer
integerint区别
一筐猪的博客
07-10 329
 (1) 默认值1.int默认值是02.integer的默认值为null(2)包装类中提供了该类型相关的很多算法操作方法(3)在集合框架中,只能存储对象类型,不能存储基本数据类型值(4)integerint不是相同的类型(5)基本类型变量主要存储在栈中,包装类型存放于堆中开发中建议使用包装类型...
Java基本数据类型与封装类型详解(intInteger区别)
08-31
本文将深入探讨Java中的int基本数据类型和Integer封装类型之间的差异。 1. 类型区别: - int是Java的八种基本数据类型之一,属于原始类型(Primitive Type),它直接存储整数值,没有对象的概念。int的默认值是0。...
详解Java中intInteger区别
08-26
Java 中 intInteger区别 Java 作为一门面向对象的编程语言,具有两种基本数据类型:基本数据类型(primitive type)和引用类型(reference type)。在 Java 中,基本数据类型只有八个:boolean、char、byte...
Java中intInteger有什么区别
LSFZ88888的博客
09-10 248
我们最为常用的基本数据类型int和它的包装类Integer,他们之间有什么区别?为何要单独讲述一遍. Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。 Java语言为每个原始类型提供了都提供了包装类型: 原始类型: boolean,c
Java基础——intinteger区别详解
weixin_43977020的博客
07-20 1058
int a = 1000;int b = 1000;a == b?再换成integer呢?int a = 1000,integer b =1000;a == b? integer实际是对象的引用,当new一个integer时,实际上是生成一个指针指向此对象,而int是直接存储数据值。
intInteger 有什么区别
路漫漫其修远兮
03-28 2167
原文地址 http://blog.163.com/icylzr@126/blog/static/24329362200822392335724/JAVA基本数据类型Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 boolean -->Boolean
intInteger区别
aiqi1964的博客
07-23 278
intInteger区别 1、Integerint的包装类,int则是java的一种基本数据类型2、Integer变量必须实例化后才能使用,而int变量不需要3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值4、Integer的默认值是null,int的默认值是0 转载于:https://www.c...
intInteger之间的区别
gottawangzi的博客
08-19 5323
intInteger之间的区别 1 Integerint的包装类,int则是Java的一种基本数据类型 2 Integer变量必须实例化之后才可以使用,而int变量不需要 3 Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4 Integer的默认值是null,int的默认值是0 延伸 关于Integer和i...
你知道Integerint区别
weixin_43525722的博客
06-08 595
最近小康面试,突然被面试官问道,说一下Integerint区别。额…可能平时就知道写一些业务代码以及看一些自己觉得比较高大上的东西,包括面试也看的一些Spring源码等,对于这种java特别基础的东西反而忽略了,导致在面试的时候突然被问到这种基础类的题目反而不知道怎么回答了。哎,还是乖乖再看看底层基础,顺带记录一下把。 基本概念(重要) Integerint 的包装类,int 则是 java 的一种基本数据类型; Integer 变量必须实例化后才能使用,而int变量不需要; Integer
intinteger区别
06-09
`int` 和 `Integer` 都是表示整数的数据类型,但是它们之间有一些区别: 1. `int` 是Java中的一种基本数据类型,而 `Integer` 是一个类,是Java中的一个对象类型。 2. `int` 可以直接使用算术运算符进行计算,而 `...
写文章

热门文章

  • 根据中序遍历和后序遍历构造二叉树 22946
  • 根据前序遍历与中序遍历构造二叉树 15851
  • 数据结构之链表 13580
  • Int和Integer的区别 11875
  • 测试管理工具‘禅道’的安装与卸载 7368

分类专栏

  • 工作 2篇
  • C 5篇
  • 数据结构 19篇
  • MySQL 12篇
  • Linux 3篇
  • JavaSE 36篇
  • 其它 1篇
  • 网络 9篇
  • 刷题 13篇
  • 测试 2篇
  • Python 2篇

最新评论

  • 基于多线程的网络聊天室的实现思路

    m0_64530902: 项目源码网页进不去

  • 测试管理工具‘禅道’的安装与卸载

    千年码一字: 卸载方法很有用,很快啊

  • 根据中序遍历和后序遍历构造二叉树

    Artem Wing: 太酷了,我直接赞一个,画图很简单易懂!!!

  • Cookie和Session的区别

    五毫米: 补充: 1.session的安全性要比cookie高 2.session内容不断增加会加重服务器负担 3.重要内容放在session中,次要内容放在cookie中 4.会话cookie存贮在浏览器内存中,生命周期和浏览器是一致的 5.持久化cookie存储在客户端磁盘中,持久化cookie的生命周期在设置cookie的时候设置

  • 根据前序遍历与中序遍历构造二叉树

    nanasylum: 根节点怎么会不唯一?

最新文章

  • Python之列表和元组的区别
  • Mac Pro安装python3时遇到的各种问题
  • 什么是归因模型
2020年1篇
2019年104篇
2018年2篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家陕西仿真玻璃钢雕塑深圳季节性商场美陈哪里买上海卡通玻璃钢动物狮子雕塑南昌人物玻璃钢雕塑深圳特色商场美陈现价朔州玻璃钢海豚雕塑厂家五华区玻璃钢雕塑加工厂家宁夏景区玻璃钢雕塑定制商场圣诞节美陈主题河北常用商场美陈研发公司桐乡玻璃钢门头雕塑商场美陈蝴蝶设计说明新款玻璃钢动物雕塑四川玻璃钢造型雕塑价格盘龙区玻璃钢雕塑加盟商门头玻璃钢雕塑找哪家清远玻璃钢人物雕塑厂家云浮玻璃钢人物雕塑报价表黄冈玻璃钢雕塑摆件厂商蒙城商场大型美陈上海欧集玻璃钢雕塑玻璃钢雕塑泥稿郑州标识校园玻璃钢景观雕塑定制肇庆古代玻璃钢卡通雕塑热销玻璃钢动物雕塑优质的玻璃钢动物雕塑价格金坛玻璃钢花盆花器佛山商场美陈公司商场美陈创意事项信阳人物玻璃钢彩绘雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化