彻底让你明白 Integer 类和 int 基本数据类型的区别

10 篇文章 0 订阅
订阅专栏

浅谈 Integer 类

目录

  • 1、Integer 类简介
  • 2、Integer 类和 int 的区别
  • 3、Integer 的自动拆箱和装箱
    •   ①、自动装箱
    •   ②、自动拆箱
  • 4、回顾开头的问题
  • 5、测试

 

突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码:
  

 public static void main(String[] args) {
    Integer i = 10;
    Integer j = 10;
    System.out.println(i == j);
      
    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b);
     
    int k = 10;
    System.out.println(k == i);
    int kk = 128;
    System.out.println(kk == a);
      
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
}

大家可以先思考一下结果是什么?

答案是:

至于为什么是这个结果,下面我们来一一介绍。
回到顶部
1、Integer 类简介

首先我们大致看一下Integer是什么,Integer 类在JDK1.0的时候就有了,它是一个类,是 int 基本数据类型的封装类。

基本API如下:

图片引用:http://blog.csdn.net/litong09282039/article/details/46309541
2、Integer 类和 int 的区别

①、Integer 是 int 包装类,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean)

②、Integer 是类,默认值为null,int是基本数据类型,默认值为0;

③、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。


4、回顾开头的问题
 

public static void main(String[] args) {
    Integer i = 10;
    Integer j = 10;
    System.out.println(i == j);
      
    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b);
     
    int k = 10;
    System.out.println(k == i);
    int kk = 128;
    System.out.println(kk == a);
      
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
}
 

我们使用反编译工具Jad,得到的代码如下:
 

public static void main(String args[])
{
    Integer i = Integer.valueOf(10);
    Integer j = Integer.valueOf(10);
    System.out.println(i == j);
    Integer a = Integer.valueOf(128);
    Integer b = Integer.valueOf(128);
    System.out.println(a == b);
    int k = 10;
    System.out.println(k == i.intValue());
    int kk = 128;
    System.out.println(kk == a.intValue());
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
}

打印结果为:

 

首先,直接声明Integer i = 10,会自动装箱变为Integer i = Integer.valueOf(10);Integer i 会自动拆箱为 i.intValue()。

①、第一个打印结果为 true

对于 i == j ,我们知道这是两个Integer类,他们比较应该是用equals,这里用==比较的是地址,那么结果肯定为false,但是实际上结果为true,这是为什么?

我们进入到Integer 类的valueOf()方法:

分析源码我们可以知道在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。那么第一个打印结果因为 i = 10 在缓存表示范围内,所以为 true。

②、第二个打印结果为 false

从上面的分析我们知道,128是不在-128到127之间的,所以第一次创建对象的时候没有缓存,第二次创建了一个新的Integer对象。故打印结果为false

③、第三个打印结果为 true

Integer 的自动拆箱功能,也就是比较两个基本数据类型,结果当然为true

④、第四个打印结果为 true

解释和第三个一样。int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比较。

⑤、第五个打印结果为 false

因为这个虽然值为10,但是我们都是通过 new 关键字来创建的两个对象,是不存在缓存的概念的。两个用new关键字创建的对象用 == 进行比较,结果当然为 false。

5、测试
 

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));

反编译结果:

 

打印结果为:

1

2

3

4

5

6

7

true

false

true

true

true

false

true

分析:第一个和第二个结果没什么疑问,Integer类在-128到127的缓存问题;

第三个由于  a+b包含了算术运算,因此会触发自动拆箱过程(会调用intValue方法),==比较符又将左边的自动拆箱,因此它们比较的是数值是否相等。

第四个对于c.equals(a+b)会先触发自动拆箱过程,再触发自动装箱过程,也就是说a+b,会先各自调用intValue方法,得到了加法运算后的数值之后,便调用Integer.valueOf方法,再进行equals比较。

第五个对于 g == (a+b),首先计算 a+b,也是先调用各自的intValue方法,得到数值之后,由于前面的g是Long类型的,也会自动拆箱为long,==运算符能将隐含的将小范围的数据类型转换为大范围的数据类型,也就是int会被转换成long类型,两个long类型的数值进行比较。

第六个对于 g.equals(a+b),同理a+b会先自动拆箱,然后将结果自动装箱,需要说明的是 equals 运算符不会进行类型转换。所以是Long.equals(Integer),结果当然是false

第七个对于g.equals(a+h),运算符+会进行类型转换,a+h各自拆箱之后是int+long,结果是long,然后long进行自动装箱为Long,两个Long进行equals判断。


原文:https://blog.csdn.net/Teacher_Lee_ZZSXT/article/details/79230501

这样给学妹讲原码、反码、补码,帮她彻底解决困扰了三天的问题
bigsai
05-24 6290
补码是给机器看的,原码是给人看的,反码是二者的桥梁
Flink的时间型和窗口概述,助你进阶Flink,畅游大数据时代
python6_quanzhan的博客
05-30 856
前言 Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。而Flink中的时间型和窗口是非常重要概念,也是学习Flink必须要掌握的两个知识点。今天我们就来探讨一下这两个知识点。 Flink中的时间型 时间型介绍 Flink流式处理中支持不同型的时间。分为以下几种: 处理时间 Flink程序执行对应操作的系
Integer及其应用
m0_46359448的博客
10-17 1983
Integer Integer的作用: 1.integer对基本int的进行包装,它包含一个int值 2.integer提供了多个方法,能在int型和String型之间互相转换,还提供了处理int型时非常有用的其他一些常量和方法 3.定义成员属性经常使用integer替代int从而可以应用更多integer的功能 compare To方法 public int compare To(Integer target) 如果当前Integer对象所包含的int值大于target包含的值则返回
Integer
Jacy_Wang的博客
01-16 557
我们先看下面这段代码: public static void main(String[] args) { Integer i = 10; Integer j = 10; System.out.println(i == j); Integer a = 128; Integer b = 128; System.out.println(a =...
Integer的方法
11-12 1325
java.lang Integer java.lang.Object   java.lang.Number       java.lang.Integer 所有已实现的接口: Serializable, Comparable public final class Integer extends Number implements Comparable In
Integer
烟雨gps
02-26 813
Integer 文章目录Integer 1、特点2、值传递和引用传递的区别3、自动封装(共享设计模式的应用) 1、特点 public static void main(String[] args) { Integer a = 1; Integer b = 2; System.out.println("交换前:" + "a = " + a + " " + "b = " ...
面试系列之Integer缓存所引发的惨案(保证看完你就彻底明白)
纸上得来终觉浅,绝知此事要躬行
08-28 454
今天在整理代码的时候发现了一段程序,如下 Integer integer1 = 3; Integer integer2 = 3; if (integer1 == integer2) System.out.println("integer1 == integer2"); else System.out.println("integer1 != integer2"); Integer in...
程序员,想要彻底弄懂Redis,这15点你一定要明白~(纯干货)
小码农 TT
03-22 362
Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。 Redis的键值可以包括字符串(strings)型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据型。 对于这些数据型,你可以执行原子操作。例如:对字符串进行附...
大数据-玩转数据-Oracle系统知识小结
s_unbo的博客
03-19 5473
一、说明 Oracle数据库是甲骨文的核心产品,Oracle 的操作都遵循sql标准,所以各个版本在基本操作方面都变化不大。Oracle划分在大型关系数据库范畴,比较Mysql或Nosql数据库来说,还是缺少些扩容的灵活性,但传统金融、通信、电力、航空、保险、大型企业用得比较多。 二、背景知识、数据建模和Linux 1.关系数据库 关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中
Integer的使用方法
02-19
Integer的使用方法,在别的地方找的,是个干粮啊
常用——Integer
qq_66633359的博客
03-20 619
包装类 什么是包装类? 以前定义变量 经常使用基本数据类型 对于基本数据类型来说 就算一个数 加点属性 加点方法 加点构造器 将基本数据类型进行了一个封装 产生了一个新的---》包装类 int byte short---》基本数据类型 包装类---》引用数据基本数据类型 对应的包装类 继承关系 byte Byte ---》Number---》Object short...
Java中的Integer
Mook的博客
06-05 445
Integer Integerint比较一、构造函数Integer(int value) 构造一个新分配的 Integer 对象,它表示指定的 int 值。 Integer(String s) 构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。 二、方法int compareTo(Integer anotherI
浅谈Integer
qq_46540738的博客
06-05 804
浅谈 Integer 目录 1、Integer 简介 2、Integer int区别 3、Integer 的自动拆箱和装箱   ①、自动装箱   ②、自动拆箱 4、回顾开头的问题 5、测试 突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码: public static void main(String[] args) { Integer i = 10; Integer j = 10; System.out
Java笔记-Integer
wenyi133的博客
09-08 276
Integer在对象中包装了一个基本int 的值。Integer 型的对象包含一个 int 型的字段。此外,该提供了多个方法,能在 int型和 String 型之间互相转换,还提供了处理 int型时非常有用的其他一些常量和方法。 字段 static int  MAX_VALUE           保持 int型的最大值的常量可取的值为 231-1。 static i
Integer详细介绍:
chen_kai_fa的博客
02-22 2282
Integer的方法讲解。
Java语言之Integer
qq_43380674的博客
06-20 7239
Java之Integer Integer简介: Integer基本数据类型int的包装器,是抽象Number的子,位于java.lang包中。 Integer在对象中包装了一个基本int的值,也就是每个Integer对象包含一个int型的字段。在Integer源码中如下定义: private final int value; 字段: [static int] MAX_VA...
[三]基础数据型之Integer详解
noteless的博客
09-28 2430
Integer 基本数据类型int包装类 Integer 型的对象包含一个 int 型的字段 属性简介 值为 2^31-1 的常量,它表示 int 型能够表示的最大值 @Native public static final int MAX_VALUE = 0x7fffffff; 值为 -2^31 的常量,它表示 int 型能够表示...
Java Integer详解
weixin_45743799的博客
03-06 758
Integer 在对象中包装了一个基本int 的值。Integer 对象包含一个 int 型的字段。此外,该提供了多个方法,能在 int 型和 String 型之间互相转换,还提供了处理 int 型时非常有用的其他一些常量和方法。 Integer 的构造方法 Integer 中的构造方法有以下两个: Integer(int value):构造一个新分配的 Integer ...
Java基本包装类详解:Integer与Character操作实例
本文通过Integer的实例展示了如何进行二进制、八进制和十六进制的转换,并探讨了包装类的作用和基本型与其对应包装类的关系。" Java语言中有八种基本数据类型,包括整型(byte, short, int, long)、浮点型...
21
原创
86
点赞
380
收藏
15
粉丝
关注
私信
写文章

热门文章

  • pip 安装.whl文件 22974
  • java创建多线程的四种方式及其区别 9014
  • Redis的哨兵机制 或者心跳机制 Redis常考的面试题 7505
  • 彻底让你明白 Integer 类和 int 基本数据类型的区别 6510
  • 解决org.hibernate.exception.ConstraintViolationException: could not execute statement 的问题 5264

分类专栏

  • idea项目 1篇
  • JavaWeb 10篇
  • juery 1篇
  • Servlet 1篇
  • fastDFS 2篇
  • Java内存模型(JMM) 1篇
  • Python分类算法 1篇
  • XGBoost 1篇
  • pythonlib 1篇
  • java环境搭建 1篇
  • Java基础 10篇
  • java集合 1篇
  • 数据库 2篇
  • 数据库优化 1篇
  • 多线程 6篇
  • 线程池 1篇
  • Redis 5篇
  • MySQL 4篇
  • 存储引擎
  • Dubbo 1篇
  • 操作系统 1篇
  • JVM 1篇
  • Spring 1篇
  • TopK 1篇

最新评论

  • 彻底让你明白 Integer 类和 int 基本数据类型的区别

    图先: 写的很深

  • 第一范式、第二范式、第三范式、BC范式

    夏日与你: 存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。这里是为什么呀 传递函数依赖是什么意思呢

  • 彻底让你明白 Integer 类和 int 基本数据类型的区别

    平头小强: 谢谢,共同进步共同成长

  • 彻底让你明白 Integer 类和 int 基本数据类型的区别

    LTIven: 感谢分享,收获甚丰表情包

  • mysql是怎么实现四种隔离级别的

    平头小强: 谢谢,很高兴帮助到你

最新文章

  • 修改idea下的maven repository总是变成默认的问题?
  • 关于java线程锁synchronized修饰普通方法与静态方法的区别
  • left join,rigth join和inner join的区别比较
2020年1篇
2019年34篇
2018年9篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

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

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