Integer与int的比较

2023-05-16

原文: http://blog.csdn.net/yang5726685/article/details/54572938?locationNum=2&fps=1

Integer与int的比较

  

 Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。


Java 为每个原始类型提供了包装类型: 
    - 原始类型: boolean,char,byte,short,int,long,float,double 
    - 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double


   如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。

  首先看代码:


 1 package com.test;
 2 /**
 3  * 
 4  * @author 刘玲
 5  *
 6  */
 7 public class TestInteger {
 8 
 9     /**
10      * @param args
11      */
12     public static void main(String[] args) {
13         int i = 128;
14         Integer i2 = 128;
15         Integer i3 = new Integer(128);
16         //Integer会自动拆箱为int,所以为true
17         System.out.println(i == i2);
18         System.out.println(i == i3);
19         System.out.println("**************");
20         Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);
21         Integer i6 = 127;
22         System.out.println(i5 == i6);//true
23         /*Integer i5 = 128;
24         Integer i6 = 128;
25         System.out.println(i5 == i6);//false
26 */        Integer ii5 = new Integer(127);
27         System.out.println(i5 == ii5); //false
28         Integer i7 = new Integer(128);
29         Integer i8 = new Integer(123);
30         System.out.println(i7 == i8);  //false
31     }
32 
33 }  

首先,17行和18行输出结果都为true,因为Integer和int比都会自动拆箱(jdk1.5以上)。

22行的结果为true,而25行则为false,很多人都不动为什么。其实java在编译Integer i5 = 127的时候,被翻译成-> Integer i5 = Integer.valueOf(127);所以关键就是看valueOf()函数了。只要看看valueOf()函数的源码就会明白了。JDK源码的valueOf函数式这样的:


1 public static Integer valueOf(int i) {
2         assert IntegerCache.high >= 127;
3         if (i >= IntegerCache.low && i <= IntegerCache.high)
4             return IntegerCache.cache[i + (-IntegerCache.low)];
5         return new Integer(i);
6     }  

看一下源码大家都会明白,对于-128到127之间的数,会进行缓存,Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。所以22行的结果为true,而25行为false。

对于27行和30行,因为对象不一样,所以为false。

我对于以上的情况总结如下:

  ①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
  ②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
  java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
  ③两个都是new出来的,都为false
  ④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比


结论:

1.new出来的Integer相比较,均为false,代表两个不同的对象,存储在堆中的位置不一样。

2.非new出来的Integer相比较,如果数在-128到127之间,则是true,否则为false 。

3.int和Integer相比较,均为ture,因为Integer会先自动拆箱为int,再进行比较。

4.Integer和new Integer相比较,均为false。

   如果值在-128到127之间,Integer的值存在于常量池,new Integer的值存在于堆中;

   如果没在-128到127之间,那么均视为new Integer,同结论1。




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

Integer与int的比较 的相关文章

  • 将浮点数向下舍入到最接近的整数?

    我想获取一个浮点数并将其向下舍入到最接近的整数 然而 如果它不是一个整体 我always想要向下舍入变量 无论它与下一个整数的接近程度如何 有没有办法做到这一点 int x 转换为整数将截断 朝向 0 0 例如math trunc 对于非负
  • C 整数溢出

    我正在使用 C 中的整数 试图探索更多关于何时以及如何发生溢出的信息 我注意到 当我添加两个正数时 其总和会溢出 我总是得到一个负数 另一方面 如果我添加两个负数 其总和溢出 我总是得到一个正数 包括 0 我做了一些实验 但我想知道这是否适
  • Java中的整数除法[重复]

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

    NET 是否具有与 PHP 等效的本机功能基数转换 http php net base convert或者我需要自己写 我想从任何基数转换为任何其他基数 其中 to 基数或 from 基数可以是 2 36 的任何整数 PHP 函数示例 ba
  • int 到 long 赋值

    我一直在尝试这个 int 和 long 转换 我尝试分配一个int变量为along多变的 代码如下 public static void main String args int i 1024 long j i long k i i i i
  • 如何生成满足某些限制的整数?

    任何人都可以帮我提供生成满足某些限制的整数的技术吗 例如 假设我需要生成整数 x 和 y 使得 100 gt x and y lt x 5 我指的并不是这个特定的示例 而是一些生成满足某些条件的整数的通用技术 嗯 这并不难 选择一个整数 可
  • mysql 中 int(11) 列的大小是多少(以字节为单位)?

    柱子的尺寸是多少int 11 在mysql中以字节为单位 该列中可以存储的最大值 An INT无论指定什么长度 都将始终为 4 个字节 TINYINT 1 字节 8 位 SMALLINT 2 字节 16 位 MEDIUMINT 3 字节 2
  • 如何使用 BufferedReader 对象从 Java 中的一行读取多个整数值?

    我正在使用 BufferedReader 类读取 Java 程序中的输入 我想读取用户的输入 该用户可以在带空格的单行中输入多个整数数据 我想读取整数数组中的所有这些数据 输入格式 用户首先输入他 她想要输入的数字数量 然后在下一行中使用多
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • 不明白为什么当变量为整数时条件评估为 True

    我正在使用表现出以下行为的代码 假设我有一个变量d我把它赋给一个整数9 d 9 为什么以下语句有效 In 95 if d print d else print Did not print d 9 In 96 当 d 本身不是布尔值且未通过以
  • 为什么我在 MySQL 中设置更大的 INT 数据类型长度时没有收到错误消息?

    我对 MySql 中的数据类型长度有点困惑 我阅读了参考手册http dev mysql com doc refman 5 0 en data types html http dev mysql com doc refman 5 0 en
  • 正则表达式查找字符串中的整数和小数

    我有一个像这样的字符串 str1 12 ounces str2 1 5 ounces chopped 我想从字符串中获取金额 无论它是否是小数 12 或 1 5 然后获取紧邻的前一个测量值 盎司 我能够使用一个非常基本的正则表达式来获取测量
  • 如何在PL/SQL中模拟32位有符号整数溢出?

    您知道如何在 Oracle PL SQL 中模拟 32 位整数溢出吗 例如 2147483647 1 2147483648 or 2147483648 1 212147483647 我尝试了 PLS INTEGER 但它引发了溢出异常 我终
  • C++从文件中读取整数并保存到数组中

    我正在制作一个仅从文本文件读取整数的程序 我想创建一个读取整数并将它们存储在数组中的函数 以便稍后可以使用该数组通过冒泡排序对它们进行排序 这是我到目前为止所得到的 但我得到的输出是一些随机的 803234 数字 void read int
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 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 是更好的选择 邮政编码不会用于任何计算 邮政编码将用于
  • 存储整数列表的最有效方法

    我最近一直在做一个项目 其中一个目标是使用尽可能少的内存来使用 Python 3 存储一系列文件 除了一个整数列表之外 几乎所有文件都占用很少的空间 大致333 000整数长且整数可达约8000在尺寸方面 我目前正在使用pickle存储列表

随机推荐

  • 变态的台阶

    时间限制 xff1a 1秒 空间限制 xff1a 32768K 热度指数 xff1a 98625 算法知识视频讲解 题目描述 一只青蛙一次可以跳上1级台阶 xff0c 也可以跳上2级 它也可以跳上n级 求该青蛙跳上一个n级的台阶总共有多少种
  • 解决xterm显示远程窗口出现“Can't open display: localhost:11.0”的问题

    参考 xff1a http unix stackexchange com questions 117159 cannot start xterm over ssh after several successes 问题描述 xff1a 远程调
  • 数值的整数次方

    时间限制 xff1a 1秒 空间限制 xff1a 32768K 热度指数 xff1a 117073 算法知识视频讲解 题目描述 给定一个double类型的浮点数base和int类型的整数exponent 求base的exponent次方 笔
  • 机器人走方格I

    链接 xff1a https www nowcoder com questionTerminal e8bb8e68434e42acbcdff0341f2a32c5 orderByHotValue 61 1 amp mutiTagIds 61
  • 年终奖

    链接 xff1a https www nowcoder com questionTerminal 72a99e28381a407991f2c96d8cb238ab orderByHotValue 61 1 amp mutiTagIds 61
  • 最近公共祖先

    链接 xff1a https www nowcoder com questionTerminal 70e00e490b454006976c1fdf47f155d9 orderByHotValue 61 1 amp mutiTagIds 61
  • 直方图内最大矩形

    有一个直方图 xff0c 用一个整数数组表示 xff0c 其中每列的宽度为1 xff0c 求所给直方图包含的最大矩形面积 比如 xff0c 对于直方图 2 7 9 4 它所包含的最大矩形的面积为14 即 7 9 包涵的7x2的矩形 给定一个
  • 罪犯转移

    题目描述 C市现在要转移一批罪犯到D市 xff0c C市有n名罪犯 xff0c 按照入狱时间有顺序 xff0c 另外每个罪犯有一个罪行值 xff0c 值越大罪越重 现在为了方便管理 xff0c 市长决定转移入狱时间连续的c名犯人 xff0c
  • 路灯

    一条长l的笔直的街道上有n个路灯 xff0c 若这条街的起点为0 xff0c 终点为l xff0c 第i个路灯坐标为a i xff0c 每盏灯可以覆盖到的最远距离为d xff0c 为了照明需求 xff0c 所有灯的灯光必须覆盖整条街 xff
  • 哈希表

    哈希表 概念 哈希表 Hash Table 也叫散列表 xff0c 是根据关键码值 xff08 Key Value xff09 而直接进行访问的数据结构 它通过把关键码值映射到哈希表中的一个位置来访问记录 xff0c 以加快查找的速度 这个
  • 哈夫曼树

    概念 哈夫曼树是一种带权路径长度最短的二叉树 xff0c 也称为最优二叉树 下面用一幅图来说明 它们的带权路径长度分别为 xff1a 图a xff1a WPL 61 5 2 43 7 2 43 2 2 43 13 2 61 54 图b xf
  • tomcat配置问题导致IDEA报错

    总结一下遇到的问题 xff1a 1 tomcat的startup闪退 xff1a 解决办法 xff1a 1 环境变量配置不能错 2 端口错误这个是新手特别超级容易犯的错误 xff0c 在装tomcat的时候经常一顿next安装了 xff0c
  • 递归转动态规划套路总结

    来自左神的教导总结 1 确定递归函数意义 2 确定大小范围 xff0c 设计表 3 确定递归终止状态 xff0c 填表边界 xff08 自底向上时 xff1a 从结尾填表 xff1b 自顶向下时 xff0c 跟踪递归流程填表 xff09 例
  • 最长公共子串

    对于两个字符串 xff0c 请设计一个时间复杂度为O m n 的算法 这里的m和n为两串的长度 xff0c 求出两串的最长公共子串的长度 这里的最长公共子串的定义为两个序列U1 U2 Un和V1 V2 Vn xff0c 其中Ui 43 1
  • JAVA虚拟机加载类到运行过程总结

    理解Java跨平台运行原理 java之所以可以跨平台是因为编译器并没有把源码文件直接编译成机器指令 xff0c 而是编译成java虚拟机可以识别和运行的字节码文件 java gt class 而字节码文件是一种无关平台的中间编译结果 xff
  • 硬币表示

    有数量不限的硬币 xff0c 币值为25分 10分 5分和1分 xff0c 请编写代码计算n分有几种表示法 给定一个int n xff0c 请返回n分有几种表示法 保证n小于等于100000 xff0c 为了防止溢出 xff0c 请将答案M
  • 最长公共子序列

    我们有两个字符串m和n xff0c 如果它们的子串a和b内容相同 xff0c 则称a和b是m和n的公共子序列 子串中的字符不一定在原字符串中连续 例如字符串 abcfbc 和 abfcab xff0c 其中 abc 同时出现在两个字符串中
  • 完全二叉树的特点

    定义 完全二叉树是由满二叉树而引出来的 对于深度为K的 xff0c 有n个结点的二叉树 xff0c 当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树 一棵二叉树至多只有最下面的一层上的结点的度数可以小
  • 数据库事务的四大特性与隔离级别及测试

    四大特性 原子性 xff08 Atomicity xff09 原子性是指事务包含的所有操作要么全部成功 xff0c 要么全部失败回滚 xff0c 这和前面两篇博客介绍事务的功能是一样的概念 xff0c 因此事务的操作如果成功就必须要完全应用
  • Integer与int的比较

    原文 xff1a http blog csdn net yang5726685 article details 54572938 locationNum 61 2 amp fps 61 1 Integer与int的比较 Java是一个近乎纯