美文网首页Java 杂谈
1.1包装类型、自动装/拆箱问题

1.1包装类型、自动装/拆箱问题

作者: Caesar_6953 | 来源:发表于2019-03-26 23:44 被阅读1次

文 | caesar

永远不安分。


 Java基础篇

一.数据类型

1.1包装类型、自动装/拆箱问题

包装类:在java语言里,最重要的特性是面向对象,因此java实现了对八种基本数据类型的封装成类,使之可生成类实例。

装箱/拆箱(java1.5以前)

//装箱

Integer integer = new integer(10);

//拆箱

int i = integer.intValue();

自动装/拆箱(java1.5至今)

//自动装箱

Integer integer = 10;

.//自动拆箱

int i = integer;

源码分析:

//源码

public static Integer valueOf(int i)  {

    return i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128];

}


== 与 equals()区别:

    ==:

    1.当用于基本数据类型比较时,比较的是数值。

    2.当用于对象比较时 (此处自然应该包括包装类)

    equals():

public boolean equals(Object obj)  {

    return (this == obj);

 }

    因为equals( )是超类Object的方法,所有类一般都会重写这个方法,equals( )实现对象在逻辑上的相等,而“逻辑”由你决定。

由源码可以看出,当传入 i 数值满足 i >= 128 || i < 128时,会new操作创建一个对象,否则执行SMALL_VALUES[i + 128] ( 即不创建新对象,返回已经创建好的对象 ),为了方便理解,举出下列例子。

public class Auto {

    public static void main(String[] args) {

        Integer i1 = 1;

        Integer i2 = 2;

        Integer i3 = 3;

        Integer i4 = 3;

        Integer i5 = 200;

         Integer i6 = 200;

        System.out.println(i3 == i4);      //true

        System.out.println(i5 == i6);      //false

        System.out.println(i3.equals (i1 + i2));        //true

    }

}

    首先明确 i3 和 i4 都处于不创建新对象这类情况的区间,因此 i3 和 i4都引用向内存块里的同个对象,结果为true。i5 和 i6数值上超过128,因此这种情况是创建新对象,既然引用的新创建的不同的对象,自然结果为false。

    需要注意的是,当出现算术运算时,会进行自动拆箱,所以i1+i2进行自动拆箱,然后将两者相加的和进行自动装箱,Integer中的equals( )方法已经重写过,是判断数值是否相等。

相关文章

  • 1.1包装类型、自动装/拆箱问题

    文 | caesar 永远不安分。 Java基础篇 一.数据类型 1.1包装类型、自动装/拆箱问题 包装类:在ja...

  • Java的自动装箱&&拆箱

    什么叫自动装箱和拆箱 简单来说: 自动装箱:就是自动将基础类型转换为包装器类型自动拆箱:就是自动将包装器类型转换为...

  • 自动装箱&自动拆箱

    自动装箱就是自动将基本数据类型转换为包装器类型;自动拆箱就是自动将包装器类型转换为基本数据类型。需要装箱拆箱的类型...

  • 三 常用API第二部分——第六节 包装类

    1、包装类的概念 2、装箱与拆箱 装箱:基本类型-->包装类对象拆箱:包装类对象-->基本类型 3、自动装箱与拆箱...

  • 2020-12-04-Java-复习-56(拆箱和装箱)

    1.概念 装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型; 2.装...

  • java Integer包装类之自动装拆箱 + Integer

    java Integer包装类之自装拆箱 + Integer == (缓存池)面试题 Integer 自动装拆箱 ...

  • java中的自动装箱和拆箱机制

    java中的自动装箱和拆箱机制 概念 自动装箱:将基本数据类型转换为包装器类型 自动拆箱:将包装器类型转换为基本数...

  • 关于 Integer 和装箱、拆箱

    一、关于拆箱和装箱 装箱 就是自动将基本数据类型转换为包装器类型;拆箱 就是自动将包装器类型转换为基本数据类型 具...

  • (超详细)Java自动装箱拆箱

    详解自动拆箱与自动装箱 一、 什么是自动装箱、自动拆箱 简单一点说,装箱就是自动将基本数据类型转换为包装器类型,拆...

  • 自动装箱与自动拆箱

    1、自动装箱 基本类型自动转换为包装类(例如:int-->Integer) 2、自动拆箱 包装类型自动转换为基本类...

网友评论

    本文标题:1.1包装类型、自动装/拆箱问题

    本文链接:https://www.haomeiwen.com/subject/mqknvqtx.html