Integer和int的区别

2023-05-16

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

    所以关键就是看valueOf()函数了。JDK源码的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);
    }

 

Integer的 属性和方法:

 
构造函数
Integer(int value)

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

Integer(String s)

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

 
修饰符和类型域和描述
static intMAX_VALUE

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

static intMIN_VALUE

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

static intSIZE

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

static Class<Integer>TYPE

Class表示基本类型的实例 int

方法摘要

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

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

bytebyteValue()

返回此值Integer作为 byte

static intcompare(int x, int y)

int数字比较两个值。

intcompareTo(Integer anotherInteger)

Integer数字比较两个对象。

static Integerdecode(String nm)

将a解码StringInteger

doubledoubleValue()

返回此值Integer作为 double

booleanequals(Object obj)

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

floatfloatValue()

返回此值Integer作为 float

static IntegergetInteger(String nm)

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

static IntegergetInteger(String nm, int val)

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

static IntegergetInteger(String nm, Integer val)

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

inthashCode()

返回此哈希码Integer

static inthighestOneBit(int i)

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

intintValue()

返回此值Integer作为 int

longlongValue()

返回此值Integer作为 long

static intlowestOneBit(int i)

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

static intnumberOfLeadingZeros(int i)

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

static intnumberOfTrailingZeros(int i)

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

static intparseInt(String s)

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

static intparseInt(String s, int radix)

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

static intreverse(int i)

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

static intreverseBytes(int i)

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

static introtateLeft(int i, int distance)

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

static introtateRight(int i, int distance)

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

shortshortValue()

返回此值Integer作为 short

static intsignum(int i)

返回指定int值的signum函数。

static StringtoBinaryString(int i)

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

static StringtoHexString(int i)

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

static StringtoOctalString(int i)

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

StringtoString()

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

static StringtoString(int i)

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

static StringtoString(int i, int radix)

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

static IntegervalueOf(int i)

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

static IntegervalueOf(String s)

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

static IntegervalueOf(String s, int radix)

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

 

详细请看:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Integer和int的区别 的相关文章

  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • JavaScript 中是否存在整数类型?

    我刚刚开始学习 Javascript 我立即对 Mozilla 中看似矛盾的陈述感到困惑JavaScript 重新介绍 JS 教程 https developer mozilla org en US docs Web JavaScript
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 将 int 和 const int 转换为 float 时的不同结果

    谁能解释为什么 int 和 const int 给出不同的结果 转换为 float 并用于浮点数学时的结果 参见 例如这段代码 int tmain int argc TCHAR argv int x 1000 const int y 100
  • C:将 int 转换为 size_t

    转换 投射的正确方法是什么int to a size t在 32 位和 64 位 linux 平台上的 C99 中 Example int hash void key int main int argc char argv size t s
  • 美国邮政编码的最佳列类型是什么?

    我想存储Zip Code 美国境内 MySQL 数据库中 Saving空间是一个优先考虑的因素 使用 VARCHAR 最大长度限制为 6 位或使用 INT 或使用 MEDIUM Int 是更好的选择 邮政编码不会用于任何计算 邮政编码将用于
  • 在 Swift 中将单个整数值视为一个范围

    我需要验证字符串的长度 字符计数允许的值为 6 9 个字符 12个字符 15 个字符 所有具有不同字符数的字符串均无效 因此 我想创建一个 Swift 函数 它接受多个范围并计算字符串 extension String func evalu
  • 类型错误:不支持的操作数类型 -:“int”和“list”

    我正在尝试用 python 创建一个程序 它会使用 Zeller 算法告诉你你出生在星期几http en wikipedia org wiki Zeller 27s congruence http en wikipedia org wiki
  • 在 String 值之后打印 int 值

    我有以下示例代码 int pay 80 int bonus 65 System out println pay bonus bonus pay 有人可以向我解释一下为什么我得到以下输出 145 6580 您的代码正在从左到右解释表达式 pa
  • C++ 中的整数到十六进制字符串

    如何将整数转换为十六进制字符串C http en wikipedia org wiki C 2B 2B 我可以找到一些方法来做到这一点 但它们似乎主要针对 C 似乎没有一种本地方法可以在 C 中做到这一点 但这是一个非常简单的问题 我有一个
  • C++ 编码整数除法

    我的代码运行了 但对于经销商来说 我需要 80 作为总成本的数字 并将其中的 80 取出 我使用 80 100 并得到收集的总成本乘以该数字 但它显示 0 include
  • 在Java中从字符串中提取这个int的最佳方法是什么?

    以下是我可能收到的一些输入的示例 1 4 34 2 99 20 etc 因此 包括负值 并且 1 2 3 等数字都是可能的 逗号不是唯一的分隔符 只是一个示例 但非整数值是 parseInt 不起作用的原因 我可以编写什么代码来解析上述 3
  • 如何将字符串转换为带有“tail”的浮点数?

    我在将字符串转换为浮点数时遇到问题 print gettype value id returns string var dump value id returns string 34 7140 length 7 float floatval
  • 压缩一组大整数

    我有一组整数 我希望对其有最紧凑的表示 我有以下限制 功能 它被设置 或者换句话说 一个唯一整数的列表 其中顺序并不重要 集合L的大小相对较小 通常为1000个元素 整数遵循 0 到 N 1 之间的均匀分布 其中 N 相对较大 例如 2 3
  • 如何仅将数字形式的字符串哈希值转换为整数

    我有从几个不同的 XML 数据库转储导入的哈希行 如下所示 但具有不同的键 Id gt 1 Name gt Cat Description gt Feline Count gt 123 我尝试使用 to i但它将非数字字符串转换为0 Fel
  • 负字符值JAVA

    为什么会出现以下情况 char p 0 p System out println p result 65535 为什么不给出编译错误或运行时异常 我预计它是因为字符不能为负数 相反 它从颠倒开始倒数 提前致谢 为什么不给出编译错误或运行时异
  • Android:转换为位图时,回收器视图的宽度和高度必须> 0

    在 Sqlite 中存储文本和图像 并尝试将这些数据检索到 recyclerview 中 当将图像显示到 recyclerview 中时 它显示错误宽度和高度必须 gt 0 在将图像保存在 sqlite 中时 我将位图转换为字节 数据库助手
  • C++ int 转字节数组

    我的 java 代码中有这个方法 它返回给定 int 的字节数组 private static byte intToBytes int paramInt byte arrayOfByte new byte 4 ByteBuffer loca
  • Float 和 Int 都是 4 字节?怎么会?

    Int 为 4 个字节 范围为 2 31 浮点数为 4 个字节 范围为 1 2E 38 Float 包含实线上更多的点 但等于 int 的大小 float 的符号 指数 分数表示形式是否如此出色 或者 Int 的 2 的补码如此可悲 以至于
  • 在 Swift 3 中,当结果变得过高时如何计算阶乘? [复制]

    这个问题在这里已经有答案了 我编写了这个函数来返回给定数字的阶乘 func factorial n Int gt Int if n 0 return 1 else return n factorial n 1 print factorial

随机推荐

  • 华清远见c语言学习笔记四

    test c Created on Jun 29 2012 Author 孙旭 华清远见实验室 1 include lt stdio h gt include lt stdlib h gt include lt string h gt in
  • 华清远见c语言学习笔记六

    test c Created on Jun 29 2012 Author 孙旭 华清远见实验室 1 include lt stdio h gt 找出一个字符串中的数字 include lt string h gt int main char
  • c++示例代码-友元

    一 友元函数 include lt iostream h gt include lt math h gt class Point Point类声明 public 外部接口 Point int xx 61 0 int yy 61 0 X 61
  • C/C++空指针总结

    在C中 在C中 xff0c 使用NULL表示空指针 xff0c 实际上 xff0c NULL被定义为 xff1a define NULL void 0 其中 void 0 表示对 0 进行强制转换 xff0c 转换为一个void类型的指针
  • Windows11镜像下载及安装

    现在微软已正式推出Windows 11预览版系统 xff0c 目前最新系统版本是22000 71 xff0c 正式版可能会在10月份推出 xff0c 届时拥有正版Windows 10系统的就可以通过Windows Update工具免费在线升
  • ROS2安装及基础知识介绍

    ros介绍 ROS xff08 Robot Operating System xff09 是一个开源的机器人操作系统 xff0c ROS系统是由大量节点组成 xff0c 其中任何一个节点都可以通过发布 订阅的方式与其他节点进行通信 举个栗子
  • Ubuntu Gnome GTK程序开机启动

    启动图标准备 GTK程序 开机启动需要首先制作desktop文件 例如 myapp autostart desktop 如下 xff1a Desktop Entry Encoding 61 UTF 8 Name 61 App Comment
  • 学习记录

    最近打算用visio画个流程图 xff0c 看看会不会遇到什么坑 1 最近打算用visio画几个流程图 xff0c 遇到什么问题在记录一番 2 分析学习一下系统权限的分配 xff0c 做到可以配置权限 xff0c 灵活一些 用户 gt 角色
  • 计算机专业学生,大三了找技术岗,怎么写一份好简历?内附269份简历模板

    计算机专业学生 xff0c 大三了找技术岗 xff0c 怎么写一份好简历 xff1f 内附269份简历模板 大家好 xff0c 我是好好学习 xff0c 天天编程的博主 xff0c 一个每天在互联网上种菜和砍柴的程序员 因为疫情的影响 xf
  • Digest Authentication 摘要认证(转载)

    原文 Digest Authentication 摘要认证 weixin 34007906的博客 CSDN博客 摘要 式认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HT
  • 面试问到 Promise,这样回答最完美了

    promise是什么 xff1f Promise是异步编程的一种解决方案 xff0c 比传统的回调函数和事件更合理和强大 所谓Promise xff0c 简单来说就是一个容器 xff0c 里面保存着某个未来才会结束的事情 xff08 通常是
  • Linux编译安装内核

    0 前言 Linux系统中可同时安装多个内核镜像 xff0c 启动时选其一运行即可 xff0c Ubuntu14 04安装Linux内核 介绍了通过apt get工具安装内核的方法 xff0c 本文将介绍如果由源码安装新内核 验证版本 xf
  • Ubuntu 16.04 上用RealSense ZR300跑Vins Mono

    Ubuntu 16 04 上用RealSense ZR300跑Vins Mono 这篇博客主要讲使用RealSense ZR300运行Vins Mono xff0c 主要包括 xff1a xff08 1 xff09 ROS上RealSens
  • 一文熟悉golang编写k8s应用部署工具

    背景 xff1a 在上篇文章里 xff0c 完成了一个简陋的spring cloud 43 k8s的应用系统 xff0c 那么如果手工部署的话 xff0c 那得分别打包5个服务 xff0c 打5个镜像 xff0c 然后安装5个服务 凡是麻烦
  • jdk11安装后不自动安装jre的问题

    回寝之后我又重新自己从头配置了一遍jdk11 关于jdk11安装后不自动安装jre的问题 xff1a 虽然安装jdk11之后可以运行java version查看版本 xff0c 但还是感觉很奇怪 查了一下 xff0c 现在的jdk本身也包含
  • 说说家乡的互联网-江西龙南

    刚好在CSDN查资料 xff0c 看到这个征文 xff0c 勾起年少回忆 xff0c 遂写下此文 2003年 xff0c 我刚上初一 xff0c 学校开设了微机课 xff0c 我第一次接触了互联网 十一 xff0c 二岁的孩子对新事物充满了
  • Python 内部函数修改外部变量的值报错

    今天写题时遇到了这样一个问题 xff1a UnboundLocalError local variable 39 total 39 referenced before assignment 错误出现在我试图通过内部函数修改外部变量的值 xf
  • go get xxx: disabled by GOPRIVATE/GONOPROXY解决方案

    go拉包比如go get的时候出了这个错 xff0c 资料比较少 xff1a disabled by GOPRIVATE GONOPROXY 长话短说 xff0c 解决方案 xff1a 给你的GOPROXY加上direct xff0c 注意
  • Window10系统安装V-rep教程(有百度网盘文件包)

    Window10系统安装V rep教程 64 meng 看了很多教程 xff0c 都没有找到适合Windows10的V rep安装教程及安装包 xff0c 官网上又那么慢 xff08 最近更新了篇博客 xff0c 大家需要其他版本的请移步
  • Integer和int的区别

    Integer是int的包装类 int是基本数据类型 最主要的区别就是这句 一个是基本数据类型 一个是类 但其实其中隐含的细节很多 比如 Integer的默认初始值是null xff0c 而int的默认初试值是0 Integer变量必须先实