Integer与int的区别我们耳熟详的有两点:1.Integer是int的包装类。2.Integer的默认初始值是null,而int的默认初试值是0。

下面通过代码进行详细比较。

 public class TestInteger {

     public static void main(String[] args) {
int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
//Integer会自动拆箱为int,所以为true
System.out.println(i == i2); //true
System.out.println(i == i3); //true
System.out.println("**************");
Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);
Integer i6 = 127;
System.out.println(i5 == i6);//true
/*Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);//false
*/ Integer ii5 = new Integer(127);
System.out.println(i5 == ii5); //false
Integer i7 = new Integer(128);
Integer i8 = new Integer(128);
System.out.println(i7 == i8); //false
} }

第8行和第9行的结果都是true,因为Integer会拆箱为int(jdk 1.5以上)。

什么时候会拆箱?——基本数据类型和引用数据类型做运算时

什么时候会装箱?——基本数据类型赋值给引用数据类型的时候

第13行的结果为true,而第16行的结果为false。很奇怪~因为java在编译Integer i5=127的时候,被翻译成Integer i5=Integer.valueOf(127);

所以关键就是看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 }

valueOf:public static Integer valueOf(int i) 返回一个表示指定的int值的Integer实例。如果不需要新的Integer实例,则通常应优先使用该方法,而不是构造方法Integer(int),因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。

对于-128到127之间的数,会进行缓存,Integer i5=127时,会将127进行缓存,下次再写Integer i6=127时,就直接从缓存中取,就不会new了。所以第13行的结果为true,而第16行的结果为false。

对于第18和21行,对象不一样,都为false。

综上所述:

①无论如何,Integer和new Integer不会相等。不会经历拆箱过程,前者指向常量池,后者的引用指向堆。他们的内存地址不一样。

②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。

③两个都是new出来的,为false。

④int和Integer(无论new 否),都为true,因为会把Integer自动拆箱为int再比较。

Integer和int的详细比较(转)的更多相关文章

  1. 【Java面试题】5 Integer的int 的种种比较?详细分析

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

  2. Java Integer于Int 进行==双等于的内存比较时的一些问题说明

    转自: https://blog.csdn.net/xingkongdeasi/article/details/79618421 部分有所修改: 前言: 越是简单的东西,我们往往越是没有去把它明白,但 ...

  3. Integer和int及String的总结

    秉承着总结发表是最好的记忆,我把之前遇到的问题在这里总结和大家分享一下,希望大家共同进步: 一.Integer和int首先说下自动拆装箱,基本数据类型转换为包装类型的过程叫装箱,反之则是拆箱,其中最特 ...

  4. Java|从Integer和int的区别认识包装类

    https://blog.csdn.net/darlingwood2013/article/details/96969339?utm_medium=distribute.pc_relevant.non ...

  5. Integer与int的区别(包装类和基本数据类型的区别)

    1. 默认值 int默认值为0,Integer的默认值为null.推论:Integer既可以表示null又可以表示0 2. 包装类中提供了该类型相关的很多算法操作方法 如把十进制装换为2进制(toBi ...

  6. Integer与int的区别

    简述:int与Integer的区别: 对于它们,我们可能只是知道简单的区别.Integer是int的一个封装类,int的初始值为0,而Integer的初始值为null.但是他们之间真的仅仅只有这些区别 ...

  7. Integer与int的种种比较

    package com.lxm.basics; public class IntegerTest { public static void main(String[] args) { Integer ...

  8. Integer与int的种种比较你知道多少?

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

  9. java Integer和int的拆箱与装箱

    官网:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html 1.赋值: a. 把int类型赋值给Integer类型:JVM会 ...

随机推荐

  1. ExtJS5_自定义菜单2

    这一节来定义另外三种类型的菜单类.首先定义菜单按钮类.文件放于app/view/main/region目录下面,文件名为ButtonMainMenu.js. /** * 显示在顶部的按钮菜单,可以切换 ...

  2. js blog

    http://www.csdn.net/article/2013-12-16/2817820-javascript-survey-results 近日DailyJS社区发起了一项针对JavaScrip ...

  3. 将银行读卡设备读取到的身份证头像Bitmap属性转换成路径

    需求是这样的,在项目开发的时候要求读取身份证,读到身份证的所有信息(信息里面包括头像属性,类型是Bitmap的).然后服务器要求我传过去的头像信息是String类型的Uri路径. 这是读卡器读到的身份 ...

  4. 本地存储-webStorage

    webStorage 提供了一种方式让网站能够把信息存储到你本地的计算机上,并在以后需要的时候进行获取.这个概念和cookie相似,区别是它是为了更大容量存储设计的.Cookie的大小是受限的,并且每 ...

  5. win7怎么安装消息队列 MSMQ

    win7般都默认装了消息队列只需要进入 控制面板-程序-程序和功能-已安装更新-打开或关闭windows功能 勾选 Microsoft Message Queue (MSMQ)服务器 启动服务 行了: ...

  6. Aggregation Models

    这是Coursera上<机器学习技法>的课程笔记. Aggregation models: mix or combine hypotheses for better performance ...

  7. UVA127- "Accordian" Patience(模拟链表)

    "Accordian" Patience You are to simulate the playing of games of ``Accordian'' patience, t ...

  8. Semaphore — Windows API

    Semaphore是旗语的意思,在Windows中,Semaphore对象用来控制对资源的并发访问数.Semaphore对象具有一个计数值,当值大于0时,Semaphore被置信号,当计数值等于0时, ...

  9. jquery 定时器

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  10. HTML5 Canvas渐进填充与透明

    详细解释HTML5 Canvas中渐进填充的参数设置与使用,Canvas中透明度的设置与使 用,结合渐进填充与透明度支持,实现图像的Mask效果. 一:渐进填充(Gradient Fill) Canv ...