Integer与int的种种比较你知道多少?[通俗易懂]

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

大家好,又见面了,我是你们的朋友全栈君。

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

 

package com.test;
/**
 * 
 * @author 刘玲
 *
 */
public class TestInteger {

    /**
     * @param args
     */
    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);
        System.out.println(i == i3);
        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(123);
        System.out.println(i7 == i8);  //false
    }

}

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

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

Integer与int的种种比较你知道多少?[通俗易懂]

看一下源码大家都会明白,对于-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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147193.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置本系列文章由zhmxy555(毛星云)编写,转载请注明出处。   文章链接: http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com  写作当前博文时配套使用OpenCV版本:2.4.8因为读研期间的研究方向是图像处理,所以浅墨这段时间闭门研究了很多OpenCV

    2022年6月22日
    58
  • restsharp.dll_restbed

    restsharp.dll_restbed一、RestSharp简绍RestSharp是一个轻量的,不依赖任何第三方的组件或者类库的Http的组件。RestSharp具体以下特性;1、支持.NET3.5+,Silverlight4,WindowsPhone7,Mono,MonoTouch,MonoforAndroid,CompactFramework3.5等  2、通过NuGet方便引入到任何项目(In…

    2022年9月8日
    0
  • css 去掉超链接样式「建议收藏」

    css 去掉超链接样式「建议收藏」我们可以用CSS语法来控制超链接的形式、颜色变化,为什么链接一定要使用下划线和颜色区分呢?其主要原因主要是考虑到1、视力差的人2、色盲的人。。。下面我们做一个这样的链接:未被点击时超链接文字无下划线,显示为蓝色;当鼠标在链接上时有下划线,链接文字显示为红色;当点击链接后,链接无下划线,显示为绿色。实现方法很简单,在源代码的和之间加上如下的CSS语法控制: …

    2022年7月19日
    59
  • 苹果鼠标怎么充电_“智能”还是“多功能”?米物智能鼠标垫测评[通俗易懂]

    导语鼠标垫可以说是最没有存在感,又非常实用的数码外设之一了,近年来智能硬件百花齐放,连佛珠都有智能的了,鼠标垫更是不在话下,而去年小米科技旗下的生态链企业米物科技,就推出了一款的米物智能鼠标垫,还拿到了德国红点奖,这到底是一款怎么样的鼠标垫,今天就来跟大家一起把玩一下~开箱刚收到的时候简直惊呆了,不说还以为这是个笔记本散热器。拆开一看,内部的配件一目了然,硕大的鼠标垫就展示在眼前,右边则是数据线和…

    2022年4月10日
    70
  • IK分词源码讲解(七)-TokenStream以及incrementToken属性处理「建议收藏」

    IK分词源码讲解(七)-TokenStream以及incrementToken属性处理「建议收藏」首先介绍下在lucene中attributeSource的类层次:org.apache.lucene.util.AttributeSource·        org.apache.lucene.analysis.TokenStream (implementsjava.io.Closeable)·        org.apache.lucene.analysis.NumericTok

    2022年7月22日
    8
  • 如何理解海森堡的「不确定性原理」(总结)「建议收藏」

    如何理解海森堡的「不确定性原理」(总结)「建议收藏」如何理解海森堡的「不确定性原理」(总结)一、总结一句话总结:海森堡紧跟着给出“测不准原理”:【越精确地知道位置,则越不精确地知道动量】不确定性原理”的意思是:【一个运动粒子的位置和它的动量不可

    2022年8月5日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号