• 浅谈Java的 int 和 Integer 的区别


    1.基础概念:

    int是我们常说的整型数字,是Java的8个原始数据类型之一。Java语言虽然号称一切都是对象,但原始数据类型是例外。


    Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、int和字符串之间转换等。在Java 5中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java可以根据上下文,自动进行转换,极大地简化了相关编程。


    注:自动装箱与拆箱实际上算是一种“语法糖”。所谓语法糖,可简单理解为Java平台为我们自动进行了一些转换,保证不同的写法在运行时等价。因此它们是发生在编译阶段的,也就是说生成的字节码是一致的。

    2.主要区别:

    Integer是int的包装类,现在最新的J,int则是java的一种基本数据类型.


    Integer变量必须实例化后才能使用,而int变量不需要.


    Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值.


    Integer的默认值是null,int的默认值是0.

    3.应用中的一些特性:

    a.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

    Integer i = new Integer(100);
    Integer j = new Integer(100);
    System.out.print(i == j); //false

    b.但如果是int 和 interger对比的话,系统会默认我们对比的是值而非内存地址:

    Integer i = new Integer(100);
    int j = 100;
    System.out.print(i == j); //true

    c. new Integer(100)生成的变量指向堆中新建的对象,而直接声明的指向的是java常量池中的对象,所以指向的地址不同(同为interger就对比地址而非指,因为interger属于类(包装类)

    Integer i = new Integer(100);
    Integer j = 100;
    System.out.print(i == j); //false

     d.对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

    Integer i = 100;
    Integer j = 100;
    System.out.print(i == j); //true
    Integer i = 128;
    Integer j = 128;
    System.out.print(i == j); //false

    这是因为 Java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。

    所以说因为128不会被缓存而是直接新建的对象,所以说存储的地址是不同的。

    引用:

    https://blog.csdn.net/zjfahs/article/details/90138277

    https://blog.csdn.net/weixin_39793752/article/details/80951220

  • 相关阅读:
    ES6学习笔记(11)----Proxy
    ES6学习笔记(10)----Set和Map数据结构
    ES6学习笔记(9)----Symbol
    ES6学习笔记(8)----对象的扩展
    ES6学习笔记(6)----函数的扩展
    ES6学习笔记(5)----数值的扩展
    struts2学习之基础笔记1
    前端面试---常见的web安全及防护原理
    前端面试整理笔记一
    id选择器
  • 原文地址:https://www.cnblogs.com/cptCarlvon/p/12672081.html
Copyright © 2020-2023  润新知