如果面试官问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再去比

转载自http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html

Integer与int的比较与区别相关推荐

  1. int** 赋值_一篇文章搞明白Integer、new Integer() 和 int 的概念与区别

    基本概念的区分 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2.Integer 变量必须实例化后才能使用,而int变量不需要 3.Integer 实际是对象的 ...

  2. 你知道Integer和int的区别吗

    最近小康面试,突然被面试官问道,说一下Integer和int的区别.额-可能平时就知道写一些业务代码以及看一些自己觉得比较高大上的东西,包括面试也看的一些Spring源码等,对于这种java特别基础的 ...

  3. Java面试题15牛客 以下关于Integer与int的区别错误的是

    Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...

  4. Integer与int的区别

    如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1; ...

  5. Integer 和 int 的区别

    一.int 和 Integer 的区别: Integer 是 int 的包装类,int 是 java 中的基本数据类型. Integer 对象必须是实例化后才能使用,而 int 变量不需要实例化. I ...

  6. Integer 与 Int 的区别

    Integer 类整形 与  Int 整形 的区别 最近在翻java的源码,发现了一些平常不注意,但很容易出错的东西,最近有空的话就整理出来. Integer:是一个int的包装类,Integer变量 ...

  7. java关于Integer和int的区别以及equals()方法

    Integer和int的比较详解 https://blog.csdn.net/andyzhaojianhui/article/details/84324466 equals()方法用于判断参数的类型和 ...

  8. Java基础 - Integer和int的区别

    一.int和Integer的区别 两者的区别主要体现在以下几个方面: 1.数据类型不同:int 是基础数据类型,而 Integer 是包装数据类型: 2.默认值不同:int 的默认值是 0,而 Int ...

  9. integer比较_每日一题:Integer、int 的区别

    点击上方蓝色字体,选择"标星公众号"优质文章,第一时间送达来自 | chenxiangxiang链接 | cnblogs.com/cxxjohnson/p/10504840.htm ...

最新文章

  1. 引用外部jQuery地址
  2. 匿名函数 闭包 ( 7 章 )
  3. 读取文本节点_总结语录|Part1:Dynamo节点介绍
  4. ios使用自带git respository管理项目
  5. C# SQLite事务操作方法分析
  6. 深入浅出谈cuda 书_入门和基础——9本关于美学的书
  7. python给两个列表排序方法_Python连接两个字符串列表并对其元素排序的最佳方法...
  8. python数据分类方法_Python数据挖掘—分类—贝叶斯分类
  9. 【kafka】kafka duplicate brokers in replica assignment
  10. 解决Git 重复输入用户名和密码的问题
  11. 如何创建SQL Server日志传送
  12. 诸子经典 —— 《管子》
  13. cesium--3d-tiles译文[官方]
  14. 怎么卸载apowerrec_怎么禁用或卸载自带应用
  15. iOS 技术支持网址
  16. 软碟通 刻录linux光盘,使用UltraISO软碟通刻录光盘
  17. 铁威马F2-NAS2评测(家用云存储NAS)
  18. Android MVP 架构设计 (一)
  19. Android 应用的逆向和审计
  20. Flutter如何强制竖屏

热门文章

  1. python如何调用参数配置文件_【Python学习笔记七】从配置文件中读取参数
  2. android studio怎么输入中文,Android studio 模拟器中输入中文
  3. siege4安装和使用介绍
  4. anroid抓包工具tcpdump的用法
  5. 字符串截取mysql
  6. html元素两种分类。替换元素和不可替换元素;块级元素和行内元素
  7. 4.Python标准库_文件管理 (部分os包,shutil包)
  8. 4.JAVA之GUI编程事件监听机制
  9. GridView控件中的一些常见问题
  10. [冷枫推荐]:数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。...