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

Integer与int的区别相关推荐

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

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

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

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

  3. Integer 和 int 的区别

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

  4. Integer 与 Int 的区别

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

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

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

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

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

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

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

  8. Integer和int的区别

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

  9. Integer 与 int 的区别

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类, Integer是java为 int 提供的封装类.int 的默认值为0,而 Integer 的默认值为 null,即 ...

最新文章

  1. 9个点的所有解锁图_黔隆科技刷机教程酷派C1068忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  2. tokudb mysql_【MySQL】TokuDB引擎安装教程
  3. 关于Android中工作者线程的思考
  4. 如何基于ERP的sales organization 创建CRM对应的数据
  5. matlab学习:人脸识别之LBP (Local Binary Pattern)
  6. django-编辑学生
  7. php文件操作(上传文件)1
  8. 蓝桥杯-基础练习 十六进制转八进制
  9. python爬取去哪网数据_Python爬虫入门:使用Python爬取网络数据
  10. 安装篇——nginx安装ssl模块转发https请求
  11. HTML日志查看器,在浏览器中查看Tomcat日志文件
  12. JavaScript BigInt 尝鲜
  13. 计算机基础雨课堂答案,基于“雨课堂”助推大学计算机基础课革新
  14. PIC单片机开发环境的搭建总结及新上手单片机平台如何实现快速开发的几点经验分享
  15. 135行实现CRUD功能(PHP)
  16. 计算机应届生的面试经验
  17. ESP32+PIO+LGVL+gui_guider
  18. 美国国土安全部和MSF相继发布了Citrix漏洞的测试利用工具
  19. JAVA-动态代理和AOP
  20. 黑客攻击入侵流程及常见攻击工具

热门文章

  1. SAP License:赛锐信息访谈启示录(五)
  2. 又到开学季 学习神器走一波 物联网开发板
  3. Object C学习笔记15-协议(protocol)
  4. 在virtualenv中安装NumPy、 SciPy、 scikit-learn、 matplotlib
  5. 深入学习webpack(四)
  6. [BZOJ3230]相似子串
  7. 关于u-boot中的.balignl 16,0xdeadbeef的理解
  8. php手工注入拿webshell
  9. C#如何设置Listview的行高-高度 转载
  10. 白话基础之虚拟存储器