目录

  • int和Integer的区别
  • int和Integer的比较
  • 有了int为什么还要有Integer
  • 补充:Integer的装箱和拆箱

int和Integer的区别

  1. int是Java的基本数据类型,长度为32位(4)字节;Integer是Java提供的封装类,在java.lang.Integer包里面。
  2. int默认值为0;而Integer默认值是null。
  3. Integer是对象的引用,必须实例化后才能使用;int则不需要。
  4. new一个Integer实际是生成一个指针指向此对象;而int则是直接存储数据值。

int和Integer的比较

//1.Integer和int比较
int i1 = 24;
Integer i2 = 24;
Integer i3 = new Integer(24);
System.out.println(i1 == i2);//true
System.out.println(i1 == i3);//true
//Integer和int比较时,会自动拆箱为int,比较的是两个的值,所以为true//2.Integer和Integer比较
Integer i4 = 100;
Integer i5 = 100;
System.out.println(i4 == i5);//true
Integer i6 = 128;
Integer i7 = 128;
System.out.println(i6 == i7);//false
//编译时翻译成:Integer i4 = Integer.valueOf(100);
//如果两个变量的值在区间-128到127之间,则比较结果为true
//如果两个变量的值不在此区间,则比较结果为false//3.Integer和 new Integer比较
Integer i8 = 100;
Integer i9 = new Integer(100);
System.out.println(i8 == i9);//false
//非new生成的Integer变量指向的是java常量池中的对象
//new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同//4.new Integer和new integer比较
Integer i10 = new Integer(1000);
Integer i11 = new Integer(1000);
System.out.println(i10 == i11);  //false
//比较的是内存地址,所以不相等

关于第二点需要补充说明,对于-128到127之间的数,程序会进行缓存,Integer i4 = 100时,会将100进行缓存,下次再写Integer i5 = 100时,就会直接从缓存中取,就不会new了。为什么会进行有范围的缓存,和valueOf()有关,可以看一下valueOf()的源代码

public static Integer valueOf(int i){assert IntegerCache.high >= 127;if (i >= IntegerCache.low && i <= IntegerCache.high){return IntegerCache.cache[i + (-IntegerCache.low)];}return new Integer(i);
}

有了int为什么还要有Integer

  1. 因为Java语言是面向对象的,对象封装可以把属性(数据跟处理这些数据的方法)结合在一起。比如Integer就有parseInt()等方法来专门处理int型相关的数据。
  2. 在Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList和LinkedList集合类就只能以类作为它的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成类,也就是Integer才能被List所接受。

补充:Integer的装箱和拆箱

  1. 自动装箱
    将基本数据类型转化为对象
Integer i=100;
//等价于Integer num = Integer.valueOf(100);
  1. 自动拆箱
    将对象转化为基本数据类型
Integer i = 100;/ /声明一个Integer对象
i++;// 进行计算时自动拆箱

int和Integer区别,为什么有了int还要有Integer相关推荐

  1. java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...

  2. java 封装表单数据类型_Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...

  3. int和Integer区别

    Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper cl ...

  4. Java基础:int与Integer区别

    int与Integer的基本使用对比 Integer是int的包装类:int是基本数据类型: Integer变量必须实例化后才能使用:int变量不需要: Integer实际是对象的引用,指向此new的 ...

  5. Java-Integer和int有什么区别

    转自:https://www.cnblogs.com/mmykdbc/p/8715646.html Java的Integer和int有什么区别 Java是面向对象的编程语言,一切都是对象,但是为了编程 ...

  6. int(1) 和 int(10) 的区别?很多老程序都理解错了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 最近开发遇到一个问题,涉及到了int(1) 和 int(10) 有什么区别?三年老开发也不知道,于是自己上网 google 研究了下 ...

  7. mysql timestamp json_mysql中timestamp,datetime,int类型的区别与优劣

    mysql中timestamp,datetime,int类型的区别与优劣 int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mys ...

  8. 你知道 int(1) 和 int(10) 的区别吗?

    昨天在群里(点击加群)看到有小伙伴分享了这篇文章,觉得挺不错的.顺手转载一下,一起涨知识! 困惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单a ...

  9. mysql int(3)与int(11)的区别

    总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果i ...

最新文章

  1. centos一键清理磁盘空间_磁盘空间不够用?教你一键清理电脑重复文件
  2. JBoss AS7 JNDI和EJB 3.1命名更改
  3. 想进美团不知道选哪个技术岗位?这里有一份通关秘籍!
  4. PX Deq: Execution Msg 等待事件
  5. 公司的摄像头密码要统一
  6. 内容太干准备好水:项目进度管理S曲线制作方法新探
  7. UE4 黑洞特效(C++)
  8. Windows 10无线网连不上怎么办-旧时光 oldtimeblog
  9. UE5中创建VR项目并在瞬移的基础上增加圆盘位移操作
  10. 荣耀30青春版怎么样?到手后远超预期!
  11. remount of the / superblock failed: Permission denied remount failed
  12. 计算机学院 统计学博士点,重大喜讯:统计学科获批一级学科博士授权点
  13. 随意发表见解易成无效表达
  14. Codeforces Round #263 (Div. 1)-A,B,C
  15. 解决thingsboard 二开 跨域问题
  16. 51单片机8×8LED点阵屏动态显示取模汉字+ Proteus仿真
  17. PBOOTCMSV3.1.3火车头采集器7.6免登录 新闻文章发布
  18. PS证件照蓝底改白底?
  19. python使用国内源安装包
  20. EXCEL难题一网打尽 无意间看到的 转过来 自己看看 (二)

热门文章

  1. 数据结构——树|N叉树之孩子双亲表示法——顺序存储结构+链表
  2. Python的学习(二十一)----Python的静态变量
  3. MATLAB-三维插值运算
  4. CSDN博客专用动态图小程序的推荐---ScreentoGIF教程
  5. Mycat读写分离、主从切换、分库分表的操作记录 https://www.cnblogs.com/kevingrace/p/9365840.html
  6. Linux c 中alarm,signal,pause的使用说明
  7. Linux 通配符和特殊符号
  8. 四种连接类型:inner(内连接),left[outer](左外连接),right[outer](右外连接),full[outer](完全外连接)
  9. 【Web】HTML 账号注册页面
  10. Latex 论文 简单常用命令例子记录