Java-int和Integer的区别

Java-int和Integer的区别在说 int 和 Integer 的区别之前 先要弄清楚两个问题 一 java 基本数据类型及其封装类二 java 自动拆箱和自动装箱一 java 基本数据类型及其封装类数据类型字节大小封装类 byte8 位 Byteshort16 位 Shortint32 位 Intergerlong 位 Longfloat32 位 Floatdouble6 位

一、java基本数据类型及其封装类

数据类型 字节大小 封装类
byte 8位 Byte
short 16位 Short
int 32位 Interger
long 64位 Long
float 32位 Float
double 64位 Double
boolean 1位 Boolean

java数据类型有基本数据类型和引用数据类型,为了方便将基本数据类型当作对象处理,java引入了基本数据类型相对应的封装类,如int封装类是Integer。

二、java自动拆箱和自动装箱

  • 1、自动装箱
    自动装箱其实就是将基本数据类型转换为引用数据类型(对象)

  • 2、自动拆箱
    自动拆箱其实就是将引用数据类型转化为基本数据类型

代码如下

 public static void main(String[] args) { Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1); int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1 System.out.println(a); System.out.println(b); } 

打印结果

1 0 

三、int和Interger的区别

从上面我们就能看出int和Interger的区别:

  • int是基本数据类型,Integer是引用数据类型;
  • int默认值是0,Integer默认值是null;
  • int类型直接存储数值,Integer需要实例化对象,指向对象的地址。

说到这,是不是认为就这么完事了,其实它们之间还有一些细节方面的区别:如下

 public static void main(String[] args) { Integer a = new Integer(1); Integer b = new Integer(1); int c = 1; int d = 1; Integer e = 1; Integer f = 1; Integer g = 130; Integer h = 130; Integer i = new Integer(130); int j = 130; } 
  • 1:a == b 吗? 废话,肯定不相等。两个new出来的对象地址不一样。
  • 2:c == d 吗? 这个也是废话,都是基本数据类型的值肯定相等。
  • 3:现在的关键问题是 e == f 吗? g == h 吗?
    答案是:e == f; g != h。为什么会出现这种情况?因为ava在进行编译时 Integer g = 130会被编译成 Integer.valueOf(130) ,这个可以通过反编译class文件看到。而通过Integer源码可以得出,Integer.valueOf() 方法会在数值-128~127之间会对Integer进行缓存,不会再重新new一个,所以 e==f ;当数值二大于127或者小于-128的时候则会重新new一个,所以g != h 。
    Integer的valueOf方法如下




 public static Integer valueOf(int i) { //IntegerCache.low == -128 ;IntegerCache.high == 127 //当数值大于-128小于127时,进行缓存;否则重新new一个。 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 
  • 4:c == e 吗, i == j 吗?
    答案都是相等的。因为封装类和基本数据类型进行比较的时候,java会自动拆箱,然后比较数值是 否相等。

综上,我们可以得出几个结论:
1、都是封装类,都是new出来的,肯定不相等。因为对象的内存地址不一样。
2、都是封装类,都不是new出来的,如果值在-128~127之间,那就相等,否则不相等。
3、如果是封装类和基本类型进行比较,只要数值相等那就相等,否则就不相等。因为封装类和基本数据类型进行比较的时候会有一个自动拆箱操作。
4、都是基本数据类型,如果数值相等,那就相等;否则不相等。








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

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

(0)
上一篇 2026年3月19日 下午9:22
下一篇 2026年3月19日 下午9:22


相关推荐

  • Tomcat 面试题(总结最全面的面试题!!!)

    Tomcat 面试题(总结最全面的面试题!!!)1、Tomcat是什么Tomcat是一个应用服务器,比方说,我有个web项目是想让他运行,就可以在运行在tomcat平台上,如果开启就可以运行访问,如果停掉tomcat服务,那么无法访问了2、Tomcat的默认端口是多少,怎么修改?8080修改方式:(1)找到Tomcat目录下的conf文件夹(2)进入conf文件夹里面找到server.xml文件(3)打开server.xml文件…

    2022年6月3日
    40
  • 关于ModifyStyle ModifyStyleEx修改自定义控件的问题[通俗易懂]

    关于ModifyStyle ModifyStyleEx修改自定义控件的问题[通俗易懂]继承与MFC控件,比如CStaticCEdit等等,在自定义代码中许多人反映无法更改控件的外观属相,这是因为大部分人没有通知主窗体自定义控件的外观更改了,可以使用下列代码进行更改: ModifyStyle(WS_BORDER,0,SWP_DRAWFRAME); ModifyStyleEx(WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME,                       WS_EX_CLIENTEDGE,SWP_DRAWFRAME);

    2022年7月19日
    17
  • DeviceIoControl_deviceregist

    DeviceIoControl_deviceregistDeviceIoControl这个api我们用的不多,但是很重要,有时会帮助我们实现一些特别的需求,如获取硬件设备信息、与硬件设备通信(读写数据)等,对照msdn,下面我们详细解释一下这个api的用法(有什么错误再所难免,各位不吝指教啊)。DeviceIoControl是用来控

    2025年9月26日
    5
  • poj 1028 Web Navigation(模拟)「建议收藏」

    poj 1028 Web Navigation(模拟)

    2022年2月5日
    43
  • 一个简单的ETL开发的过程(informatica)

    一个简单的ETL开发的过程(informatica)大致的了解过程,中间不涉及组件部分。 正文PowerCenter的开发过程大致可以分为几步:1.在客户端PowerCenterDesigner中导入源表和目标表的结构定义。(只是表结构)2.在PowerCenterDesigner中执行的事件为:   1&gt;.创建Mapping。   2&gt;.拖动源和目标进入Mapping。(类似于定义变量)   …

    2022年5月29日
    103
  • Json交互处理_stata交互项检验

    Json交互处理_stata交互项检验Json交互处理JSON简介JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。在JavaScript语言中,一切都是对象。因此,任何JavaScript支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他

    2022年10月15日
    4

发表回复

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

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