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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL自增主键值回溯问题

    MySQL自增主键值回溯问题平时我们使用MySQL时,通常每一个表都会有一个自增主键ID,每新增一条数据,ID值就会自增1。但在8.0之前版本的MySQL中,这个自增值会存在一个回溯的问题。例如,在一个新表中插入三条主键为1、2、3的数据行,这时候用SHOWCREATETABLE命令查看该表的AUTO_INCREMENT的值是4,这是没问题的。然后把ID=3的数据行删掉,再次查询AUTO_INCREMENT的值,依然是4,这也是没问题的。但如果重启一下MySQL,这个值就会变回3,而不是4,发生了回溯。这是因为AUTO_I

    2022年6月16日
    77
  • 基于DNS的GSLB,基于应用重定向的GSLB,基于主机路由注入的GSLB

    基于DNS的GSLB,基于应用重定向的GSLB,基于主机路由注入的GSLB基于DNS的GSLB,基于应用重定向的GSLB,基于IP地址伪装(三角传输)的GSLB,基于主机路由注入的GSLB(Anycast)引言在过去的几年中,随着互联网的快速发展和企业应用WEB化,服务器负载均衡(SLB)技术已经不再陌生。服务器负载均衡根据用户数据请求中的4-7层信息将其智能转发到后端少则数台多则成…

    2022年5月9日
    47
  • 虚拟主机和云服务器有什么区别,我们应该如何选择?[通俗易懂]

    虚拟主机和云服务器有什么区别,我们应该如何选择?[通俗易懂]虚拟主机已经有了一段时间的历史,近几年随着其技术的不断成熟,以及其低廉的价格,成为众多站长的首选对象。但近两年云计算的出现,衍生出云服务器这个产物。这时,很多站长便对虚拟主机与云服务器应该如何选择感到困扰,不知是选择技术比较成熟的虚拟主机,还是选择最新的云服务器。虚拟主机与云服务器的区别:虚拟主机是利用虚拟技术将一台物理服务器划分成多个“虚拟”服务器,虚拟主机的出现大大节省了服务器硬件的成本,…

    2022年6月25日
    33
  • Ural 1025-Democrary in Danger

    Ural 1025-Democrary in Danger

    2021年9月14日
    47
  • git使用cherry-pick和merge合并文件和分支

    git使用cherry-pick和merge合并文件和分支

    2021年5月13日
    246
  • Srvctl命令详解(10g)「建议收藏」

    Srvctl命令详解(10g)「建议收藏」Srvctl命令 Srvctl命令式RAC维护中最常用的命令也是最复杂的命令。这个工具用来维护一下几种资源:Database,Instance,ASM,Service,Listener和NodeApplication,nodeApplication又包括GSD,ONS,VIP。 Srvctl命令的用法: [root@felix2bin]#./srvctl-help…

    2025年9月8日
    6

发表回复

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

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