Integer 和 int 的区别

Integer 和 int 的区别一 int 和 Integer 的区别 Integer 是 int 的包装类 int 是 java 中的基本数据类型 Integer 对象必须是实例化后才能使用 而 int 变量不需要实例化 Integer 实际是对象的引用 当 new 一个 Integer 时 实际上是生成一个指针指向此对象 而 int 则是直接存储数据值 Integer 的默认值是 null int 的默认值是 0

一、int 和 Integer 的区别:

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

二、Integer 和 int 的比较

1.由于 Integer 变量实际上是对 Integer 对象的引用,所以通过 new 生成的两个对象,永远不相等,因为 new 生成的两个对象的内存地址不同。

 Integer i = new Integer(10); Integer j = new Integer(10); System.out.println(i == j);//false 

2.Integer 变量和 int 变量比价时,只要变量的值时相等的,结果就为 true,因为包装类 Integer 和基本数据类型 int 比较时,java 会自动拆包装为 int(自动拆箱),再进行比较,实际上就变为两个 int 变量的比较。

 Integer i = new Integer(10); int j = 10; System.out.println(i == j);//true 

3.对于非 new 生成的两个 Integer 对象进行比较时,如果两个变量的值在区间 -128~127 之间,则比较结果为 true,如果两个变量的值不在此区间,则比较结果为 false

 Integer i = 127; Integer j = 127; System.out.println(i == j);//true Integer x = 128; Integer y = 128; System.out.println(x == y);//false 

  这是因为 java 在编译 Integer i = 127 ,会翻译为 Integer i = Integer.valueOf(127),在 java 中定义如下

Integer 和 int 的区别

  java 对于 -128~127 之间的数会进行缓存,Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会再去创建新的变量,会存在内存中被重用,始终只存在一个对象,也是享元模式的一种。

4.对于非 new 生成的 Integer 对象,和 new 生成的 Integer 对象,结果为 false,因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同

 Integer a = new Integer(200); Integer b = 200; System.out.println(a == b);//false 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214184.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:48
下一篇 2026年3月18日 下午4:48


相关推荐

  • J2EE架构简介_手机架构

    J2EE架构简介_手机架构J2EE体系结构简介J2EE(Java2Platform,EnterpriseEdition)即Java2平台企业版,它提供了基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型,这个多层通常通过三层或四层来实现:①客户层,运行在客户计算机上的组件。②Web层,运行在J2EE服务器上的组件。③业务层,同样是运行在J2EE服务器上的组件。

    2022年10月11日
    5
  • OpenClaw for macOS: 完整本地化部署指南(2026.2.6-3 版本)

    OpenClaw for macOS: 完整本地化部署指南(2026.2.6-3 版本)

    2026年3月13日
    2
  • PhpStorm 2021.12.13激活码(注册激活)[通俗易懂]

    (PhpStorm 2021.12.13激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlFN…

    2022年3月30日
    42
  • Application received signal SIGABRT[通俗易懂]

    ApplicationreceivedsignalSIGABRT(null)(( 0CoreFoundation0x0000000182bbadc8<redacted>+148 1libobjc.A.dylib0x000000018221ff80ob…

    2022年4月8日
    110
  • clion激活码2021【2021免费激活】

    (clion激活码2021)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    42
  • 曼彻斯特编码与差分曼彻斯特编码的区别

    曼彻斯特编码与差分曼彻斯特编码的区别以为例子 上面是曼彻斯特编码 下面是差分曼彻斯特编码共同点 二者在中间位置不管 0 或 1 均有跳变不同点 曼彻斯特编码 0 是从低到高 1 是从高到低 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 而差分曼彻斯特编码遇到 0 则在起始位置处跳变 1 则不变化 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 但是第一个发送的编码则是按照曼彻斯特编码来的 如果是 0 就是低到高 否则高到低

    2026年3月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号