博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟着小白浅谈"自动装箱及自动拆箱"
阅读量:3673 次
发布时间:2019-05-21

本文共 936 字,大约阅读时间需要 3 分钟。

自动装箱及自动拆箱篇:

    今天小白和大家们谈谈什么是自动装箱及自动拆箱,那么什么是自动装箱和拆箱了?

其实就是包装类(wrapper)提供的一种机制自动装箱(autoboxing)自动拆箱(unboxing)该功能是j2se.5.0提供的,里面有基本数据类型所对应

的对象类型(共有8种包装类),如:

 

byte——Byte

short——Short

int ——Integer

long——Long

float——Float

double——Double

char——Character

boolean——Boolean

那么基本数据类型和包装类有什么区别了?

int  a =10;//基本数据类型是没有什么方法可用的

Integer b = 10;//包装类是有方法可以用的

那么什么是自动装箱了?

如:

Integer b = 10;//就是自动装箱,其实是这样的 Integer a = new Integer(10);

//因为编译会自动帮我们做这样的语法编译

那么什么是自动拆箱了?

Integer a = 10;//装箱

int b = a;//拆箱 实际是 int b = a.intValue();

运算时候的自动拆箱:

Integer a = 10;

System.out.println(a++);

说到这我来和大家谈谈当初我陷进的一道题目。

题目是这样的:

Integer a = 1000,b=1000;

Integer c=100,d=100;

System.out.println(a==b);

System.out.println(c==d);

我第一感告诉我输出 true true,但是答案却是 false true 我当时就慌了,这种坑题对咱们小鸟伤害过万·····

为什么会出现这个答案?

咱们来看看Integer类的源码就清楚了

对于是-128~127的数据Integer.valueOf(int i )会返回的是缓存的Integer对象而不是新建一个对象所以在上面那题中c==b是true

而a 和 b 已经超出大小,Integer.valueOf(int i )方法会返回一个新建的对象所以a 和 b 不是指向同一个对象。

din 

你可能感兴趣的文章
多态,父类引用接收子类对象调用方法,(属性封装,方法多态)
查看>>
instanceof,继承关系
查看>>
接口,implement,多继承
查看>>
内部类,静态内部类,static,一个包下的class并列
查看>>
异常机制,exception,error,运行时异常,IO异常
查看>>
任务,线程,进程,多线程
查看>>
线程创建的三种方式,线程交替执行,start和run方法,thread class,Runnable接口,Callable接口,通过thread类创建线程下载图片
查看>>
实现Runnable接口,extends继承thread类与implement继承Runnable对比,Runnable接口中只有run方法
查看>>
初识并发问题(一个对象分配三个进程同时进行取票),线程延时Thread.sleep方法
查看>>
Runnable接口创建线程,多线程,龟兔赛跑问题,IDEA中方法体的折叠,最重要的第二种线程创建方式!!!
查看>>
线程创建方式3,实现Callable接口创建多线程下载某些图片(了解即可)
查看>>
静态代理模式,Thread类
查看>>
接口,创建三个类实现一个接口,静态内部类,局部内部类,匿名内部类,lamda表达式,各种实现接口的方式,函数式接口
查看>>
线程的五大状态,继承Runnable接口重写run方法,线程的停止
查看>>
多线程休眠
查看>>
线程礼让yield,获取线程名方法,多线程的创建示范,
查看>>
线程强制执行join
查看>>
观测线程状态
查看>>
线程的优先级,对象创建线程new的是继承Runnable接口的类
查看>>
守护线程,用户线程
查看>>