Integer和int的区别

Integer和int的区别Integer 是 int 的包装类 int 是基本数据类型最主要的区别就是这句一个是基本数据类型 一个是类 但其实其中隐含的细节很多 比如 Integer 的默认初始值是 null 而 int 的默认初试值是 0 Integer 变量必须先实例 int 变量则可以直接使用因为 Integer 是包装的类 所以自带很多方法可以使用 方法表附在最后 而 int 是基本数据类型只能做一些基本的

  • Integer是int的包装类, int是基本数据类型

最主要的区别就是这句 一个是基本数据类型, 一个是类,

但其实其中隐含的细节很多,比如:

  • Integer的默认初始值是null,而int的默认初试值是0
  • Integer变量必须先实例,int变量则可以直接使用

因为Integer是包装的类, 所以自带很多方法可以使用, (方法表附在最后),

而int是基本数据类型只能做一些基本的+-*/=等操作 ,当二者交叉就会出现很多问题, 

 

下面是一些Integer 的用法和注意事项:

  • “==”和equals():

在Integer类中,“==”用来比较对象地址是否相同,并且Integer类重写了equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer类型的对象,如果是则判断值是否相同,值相同则返回true,值不同则返回false,如果obj不是Integer类的对象,则返回false。需要注意的是:当参数是基本类型int时,编译器会给int自动装箱成Integer类,然后再进行比较。

既然提到了拆箱和装箱, 装箱就是由基本数据类型封装成类的过程, 反而反之

那么什么时候会拆箱?——基本数据类型和引用数据类型做运算时

       什么时候会装箱?——基本数据类型赋值给引用数据类型的时候

  • Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(new生成的是两个对象,其内存地址不同)。
Integer i = new Integer(1); Integer j = new Integer(1); System.out.print(i == j); //false
  •  Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)
    Integer i = new Integer(1); int j = 1; System.out.print(i == j); //true

 

  • 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)
Integer i = new Integer(1); Integer j = 1; System.out.print(i == j); //false
  • 对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false
    Integer i = 1; Integer j = 1; System.out.print(i == j); //true 
    Integer i = 128; Integer j = 128; System.out.print(i == j); //false

     这条乍看起来绝对是蒙蔽的, 一样的方式怎么有的时候返回真有的时候为假呢?

因为JVM中一个字节一下的整型数据(即[128,127])会在JVM启动时加载进内存,除非用new Integer()显示的创建对象,否则都是同一对象。

Integer i = 1时,会将1进行缓存,下次再写Integer j = 1时,就会直接从缓存中取,就不会new了, 这样取到的1 地址也是相同的, ==判断返回真,

对于-128到127范围之外的数 实际上就是new得到的, 地址不同==判断为假

对于这点感兴趣的可以看看这个解释:

  • java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);
    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); }

 

Integer的 属性和方法:

 
构造函数
Integer(int value)

构造一个Integer表示指定int值的新分配对象。

Integer(String s)

构造一个新分配的Integer对象,该对象表示参数int指示的值 String

 
修饰符和类型 域和描述
static int MAX_VALUE

保持最大值的常数int可以是2 31 -1。

static int MIN_VALUE

保持最小值的常数int可以为-2 31。

static int SIZE

用于表示int二进制补码二进制形式的值的位数。

static Class
TYPE

Class表示基本类型的实例 int

方法摘要

 
修饰符和类型 方法和描述
static int bitCount(int i)

返回指定int值的二进制补码表示形式中的一位数。

byte byteValue()

返回此值Integer作为 byte

static int compare(int x, int y)

int数字比较两个值。

int compareTo(Integer anotherInteger)

Integer数字比较两个对象。

static Integer decode(String nm)

将a解码StringInteger

double doubleValue()

返回此值Integer作为 double

boolean equals(Object obj)

将此对象与指定的对象进行比较。

float floatValue()

返回此值Integer作为 float

static Integer getInteger(String nm)

确定具有指定名称的系统属性的整数值。

static Integer getInteger(String nm, int val)

确定具有指定名称的系统属性的整数值。

static Integer getInteger(String nm, Integer val)

返回具有指定名称的系统属性的整数值。

int hashCode()

返回此哈希码Integer

static int highestOneBit(int i)

返回一个int最多只有一位的值,位于指定int值中最高位(“最左侧”)的一位 。

int intValue()

返回此值Integer作为 int

long longValue()

返回此值Integer作为 long

static int lowestOneBit(int i)

返回一个int最多只有一位的值,位于指定int值中最低位(“最右侧”)一位的位置 。

static int numberOfLeadingZeros(int i)

返回指定int值的二进制补码二进制表示中最高位(“最左侧”)一位之前的零位数。

static int numberOfTrailingZeros(int i)

返回指定int值的二进制补码表达式中最低位(“最右侧”)一位之后的零位数 。

static int parseInt(String s)

将字符串参数解析为带符号的十进制整数。

static int parseInt(String s, int radix)

将字符串参数解析为第二个参数指定的基数中的有符号整数。

static int reverse(int i)

返回通过反转指定int 值的二进制补码二进制表示中的位顺序而获得的值。

static int reverseBytes(int i)

返回通过反转指定int值的二进制补码表示中的字节顺序获得的值。

static int rotateLeft(int i, int distance)

返回通过旋转int指定位数左侧的指定值的二进制补码表示获得的值。

static int rotateRight(int i, int distance)

返回通过将指定int值的二进制补码表示法向右旋转指定的位数而获得的值。

short shortValue()

返回此值Integer作为 short

static int signum(int i)

返回指定int值的signum函数。

static String toBinaryString(int i)

返回整数参数的字符串表示形式,作为base 2中的无符号整数。

static String toHexString(int i)

返回整数参数的字符串表示形式,作为基数为16的无符号整数。

static String toOctalString(int i)

返回整数参数的字符串表示形式,作为基数为8的无符号整数。

String toString()

返回String表示此Integer值的对象 。

static String toString(int i)

返回String表示指定整数的对象。

static String toString(int i, int radix)

返回第二个参数指定的基数中第一个参数的字符串表示形式。

static Integer valueOf(int i)

返回Integer表示指定int值的实例 。

static Integer valueOf(String s)

返回包含Integer指定值的对象String

static Integer valueOf(String s, int radix)

返回一个Integer对象,该对象保存String使用第二个参数给出的基数解析时从指定的值中提取的值。

 

详细请看:

https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html 

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

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

(0)
上一篇 2026年3月26日 下午2:09
下一篇 2026年3月26日 下午2:09


相关推荐

  • python随机生成一个数字_python随机生成

    python随机生成一个数字_python随机生成在数据分析中 数据的获取是第一步 numpy random 模块提供了非常全的自动产生数据 API 是学习数据分析的第一步 总体来说 numpy random 模块分为四个部分 对应四种功能 简单随机数 产生简单的随机数据 可以是任何维度排列 将所给对象随机排列分布 产生指定分布的数据 如高斯分布等生成器 种随机数种子 根据同一种子产生的随机数是相同的 1 生成器电脑产生随机数需要明白以下几点 随机

    2026年3月16日
    2
  • 一阶惯性环节的性能分析——自动控制原理基础补充(二)

    一阶惯性环节的性能分析——自动控制原理基础补充(二)以前读书的时候学习自动控制原理,就是为了考试,各种相频幅频特性题咣咣做,一点都不含糊,但是实际代表什么意义一点都不知道。现在真是发现,这个东西有用得一批。这篇文章从一阶惯性环节为切入点,对自动控制原理进行一个简单的复习。还蛮喜欢博客里面写东西的,按照自己思路,按照逻辑一点一点往下,不像发文章八股文一样。1一阶惯性环节的bode图对于这个非常常见的一阶惯性系统而言,其关键指标就是截止频率。截止频率的定义:从频域响应的角度讲,当保持输入信号的幅度不变,改变频率使输出信号降至最大值的0.707倍

    2022年10月5日
    5
  • elasticsearch搜索引擎搭建

    elasticsearch搜索引擎搭建课程作业的简单记录 环境说明 操作系统 windows10 Jdk java11 Elasticsearc 16 0 谷歌浏览器 97 0 4692 71 正式版本 64 位 一 目标 1 淘宝抓取商品信息 2 利用抓取的信息搭建搜索引擎二 设计方案 1 爬虫 如下 提取淘宝网页中的商品文本信息 包括商品标题 title 价格 price 付款人数 nums 店铺名称 name 店铺地址 address 保存到 csv 文件中 2

    2026年3月18日
    2
  • pycharm 删除项目_ios隐藏的已购项目怎么删除

    pycharm 删除项目_ios隐藏的已购项目怎么删除PyCharm彻底删除项目直接删除源文件,删不干净,会留下一些文件1、点击File,选择CloseProject2、关闭项目之后,会弹出一个选择项目的界面,点击你想要删除的项目右边的叉3、然后找到该项目所在的路径,选中该项目的文件,“Shift+Delete”(永久删除,不放入回收站)就OK了路漫漫其修远兮,吾将上下而求索。核心关键:python实战是检验学习效果的唯一…

    2022年8月29日
    6
  • Nano Banana Pro免费吗?国内使用保姆级教程,8大场景提示词直接抄

    Nano Banana Pro免费吗?国内使用保姆级教程,8大场景提示词直接抄

    2026年3月13日
    2
  • stacktrace: java.lang.ClassCastException: java.util.HashMap cannot be cast to[通俗易懂]

    stacktrace: java.lang.ClassCastException: java.util.HashMap cannot be cast to[通俗易懂]今天线上发了好几封预警邮件,邮件内容如下:看了下项目报错的代码:ApiResult&lt;WithdrawResultDto&gt;withdrawResult=loanApiService.queryWithdrawResult(contractNo);WithdrawResultDtowithdraw=withdrawResult.getDa…

    2025年10月11日
    13

发表回复

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

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