int 和 Integer的区别

2023-05-16

int 和 Integer的区别

  • 分析
    • int
    • Integer
    • int 与 Integer 的区别
    • 相同值下的 int 和 Integer 的比较结果

分析

int

int 是java的基本数据类型。

Integer

Integer 继承了Object类,是对象类型,是 int 的包装类。

int 与 Integer 的区别

  1. 值的存储
    int 存储在栈中
    Integer 对象的引用存储在栈空间中,对象的数据存储在堆空间中。
  2. 初始化
    int 初始化值为0。
    Integer 初始化值为null。
  3. 传参
    int 是值传递,栈中的数据不可变。
    Integer 对象是引用传递,引用不可变,但是引用指向的堆空间地址中的值是可以改变的。
  4. 泛型支持
    泛型不支持int,但是支持Integer。
  5. 运算
    int 可以直接做运算,是类的特性。
    Integer 的对象可以调用该类的方法,但是在拆箱之前不能进行运算,需要转化为基本类型int。

相同值下的 int 和 Integer 的比较结果

  1. 两个通过new生成的变量,结果为false。
  2. int 和 Integer 的值比较,若两者的值相等,则为true。
    (注意:在比较时,Integer会自动拆箱为int类型,然后再做比较。)
  3. new 生成的Integer变量 和 非new 生成的Integer变量比较,,结果为false。
    (注意:new 生成的Integer变量的值在堆空间中,非new 生成的Integer变量的值在在常量池中。)
    (注意:非new生成的Integer变量,会先判断常量池中是否有该对象,若有则共享,若无则在常量池中放入该对象;也叫享元模式,后面再说。)
  4. 两个非new 生成的Integer对象比较,则结果为true。
    (注意:此处需要一个前提:值的范围在 -128 ~ 127 之间。
    涉及到java对 int 与 Integer 的自动装箱和拆箱的一种模式:享元模式—flyweight,为了加强对简单数字的重复利用。
    在赋值时,其实是执行了Integer的valueOf()方法。
    当值在 -128 ~ 127之间时,java会进行自动装箱,然后会对值进行缓存,如果下次再有相同的值,会直接在缓存中取出使用。缓存是通过Integer的内部类IntegerCache来完成的。
    当值超出此范围,会在堆中new出一个对象来存储。
    PS:自动装箱与拆箱是在JDK1.5中出现的。
  5. 内部类IntegerCache
    通过此类可以缓存简单数字。
    缓存的数大小可以由 -XX:AutoBoxCacheMax = 控制。
    jvm初始化时,java.lang.Integer.IntegerCache.high属性可以设置并保存在私有系统属性中。
    规定了low属性的值:-128
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

int 和 Integer的区别 的相关文章

  • C++ 向量大小类型

    我刚刚开始学习 C 有一个关于向量的问题 我正在读的书指出 如果我想提取 double 类型向量的大小 例如 我应该这样做 vector
  • 为什么 int[] a = new int[1] 而不是 int a ?

    这段代码中是否有一些我在 java 中看不到的隐藏含义 怎么可能有用呢 int a new int 1 不仅仅是 int a 因为从我的角度来看这是一样的 int a 定义一个原始 int int a new int 1 定义一个有空间容纳
  • 最有效的便携式溢出检测? [复制]

    这个问题在这里已经有答案了 与 C C 和 D 等金属语言类似 检测无符号 64 位溢出的最有效 合理可移植的方式是什么 即不使用汇编程序 尽管您可能假设二进制补码算术和环绕行为 乘法中的整数 通过将无符号类型可表示的最大值除以被乘数之一
  • 检查 Python 列表中的项目是否为 int/number

    我有一个 Python 脚本 它读取 csv 文件并将每个值存储到列表列表中 list x y 我对此没有任何问题 list i 0 for row in reader list append list i append row 0 i 1
  • C 如何计算没有浮点精度的百分比(千)

    如何将 2 个 int 值的百分比计算为表示百分比的 int 值 更精确的是千分之一 背景 目的 使用没有 FPU 的处理器 浮点计算所需的时间要长 100 倍 int x 25 int y 75 int resultPercentage
  • 对 3 个数字进行排序而不进行分支

    在 C 或 C 中 如何实现三个 整数 数字的无分支排序 这可能吗 没有条件 仅对 uint 进行强制转换 完美的解决方案 int abs int a int b a b b gt gt sizeof int CHAR BIT 1 1 re
  • 整数求和布鲁斯,短+=短问题

    C 程序 short a b a 10 b 10 a a b Error Cannot implicitly convert type int to short we can also write this code by using Ar
  • Julia:生成唯一的随机整数数组

    我正在尝试创建 10 个唯一随机整数的元素数组 但是我无法创建具有唯一值的数组 Julia 中是否有类似 Python 的东西样本函数 https docs python org 2 library random html random s
  • 转换为 int16、int32、int64 - 您如何知道选择哪一个?

    我经常必须转换检索到的值 通常作为字符串 然后将其转换为 int 但在 C Net 中 您必须选择 int16 int32 或 int64 当您不知道检索到的数字有多大时 您如何知道选择哪一个 这里每个提到声明 Int16 保存 ram 的
  • 整数最小值和最大值

    我是编程新手 我正在学习一本Java对象编程书籍 并在计算机上同时执行书中的教程和示例 书中说整数的最大值和最小值是 Integer MAX VALUE 2147483647 Integer MIN VALUE 2147483648 那么好
  • 在c中动态增加数组(int *)的大小

    我想动态地将数字添加到c中的数组中 我的想法是分配一个大小 1 的新数组 添加数字 释放根数组并将指针从 temp 更改为根数组 像这样 void addNumber int a int size int number size size
  • Javascript解析int64

    如何将长整数 作为字符串 转换为 Javascript 中的数字格式而不用 javascript 对其进行四舍五入 var ThisInt 9223372036854775808 alert ThisInt r parseFloat Thi
  • 通过列表搜索

    我一直在尝试定义一个函数 给定一个整数列表和一个整数 n 返回一个布尔值 指示 n 是否在列表中恰好出现一次 我有这个 但它不起作用 我无法弄清楚 once a gt a gt Bool gt Bool filter filter p x
  • Java中的整数除法[重复]

    这个问题在这里已经有答案了 这感觉像是一个愚蠢的问题 但我在 Java 文档中找不到答案 如果我声明两个 int 然后将它们相除 到底发生了什么 他们是否转换为floats doubles首先 划分 然后投射回integer 或者除法是作为
  • .NET 中的 base_convert

    NET 是否具有与 PHP 等效的本机功能基数转换 http php net base convert或者我需要自己写 我想从任何基数转换为任何其他基数 其中 to 基数或 from 基数可以是 2 36 的任何整数 PHP 函数示例 ba
  • 一元运算符 ++ 不能应用于 Int 类型的操作数

    为什么下面的 swift 代码会给我带来错误 一元运算符 不能应用于 Int 类型的操作数 在 Xcode 6 3 2 上使用 swift 1 2 struct Set var player1Games Int var player2Gam
  • 整数构造变体

    大家好 我遇到了一个有趣的事件 正在寻找解释 在 Java 1 6 中 Integer a new Integer 5 Integer b new Integer 5 System out println a b Integer c 5 I
  • Javascript 是否处理整数上溢和下溢?如果是,怎么办?

    我们知道Java不处理下溢和溢出 https stackoverflow com questions 3001836 how does java handle integer underflows and overflows and how
  • 分组为连续整数范围

    我检查了其他帖子 包括使用 Linq 按可变整数范围进行分组 https stackoverflow com questions 1375997 group by variable integer range using linq 但我没有
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege

随机推荐