java中的装箱和拆箱详解
Posted 泡^泡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的装箱和拆箱详解相关的知识,希望对你有一定的参考价值。
什么是装箱和拆箱
装箱就是自动将基本数据类型转换为包装器类型。
拆箱就是自动将包装器类型转换为基本数据类型。
总结
- Ingeter是int的包装类,int的初始值为0,Ingeter的初始值为null。
- 无论如何,Integer与new Integer()不会相等。不会经历拆箱过程,Integer i8 = new Integer(127)的引用指向堆,而Integer i4 = 127指向专门存放他的内存(常量池),他们的内存地址不一样,使用 == 比较都为false。
- 两个都是非new出来的Integer,使用 == 比较,如果数在-128到127之间,则是true,否则为false。
- 两个都是new出来的,==比较都为false。若要比较值是否相等,需使用equals方法进行比较。
- int和Integer(无论new否)比较,都为true,因为会把Integer自动拆箱为int再去比。
实验
public class Test
public static void main(String[] args)
// 两个new出来的Integer类型的数据比较,相当于把new出来的地址作比较
Integer a0 = new Integer(1);
Integer a1 = new Integer(1);
System.out.println("Integer 对象作比较 a0 == a1: " + (a0 == a1));
// 调用intValue方法得到其int值
System.out.println("使用intValue得到int值作比较 a0 == a1: " + (a0.intValue() == a1.intValue()));
// 把Integer类型的变量拆箱成int类型
int a2 = 1;
System.out.println("将Integer自动拆箱 a1 == a2: " + (a1 == a2));
// Integer对象赋值比较,其实也是内存地址的比较
// 自动装箱,如果在-128到127之间,则值存在常量池中
Integer a3 = 30;
Integer a4 = 30;
System.out.println("Integer对象赋值比较 a3 == a4: " + (a3 == a4));
// Integer对象赋值(超过-128~127区间)比较
Integer a5 = 128;
Integer a6 = 128;
System.out.println("Integer对象赋值(超过-128~127区间)比较 a5 == a6: " + (a5 == a6));
// Integer对象赋值(超过-128~127区间)比较,调用intValue后再作比较
Integer a7 = 128;
Integer a8 = 128;
System.out.println("Integer对象赋值(超过-128~127区间)比较,调用intValue后 a7 == a8: " + (a7.intValue() == a8.intValue()));
// 使用Integer类的equals()方法进行的是数值的比较
Integer a9 = 129;
Integer a10 = 129;
System.out.println("Integer类的equals()方法进行的是数值的比较 a9 == a10: " + a9.equals(a10));
以上是关于java中的装箱和拆箱详解的主要内容,如果未能解决你的问题,请参考以下文章