new Integer(100) 每次都会新建一个对象

Integer.valueOf(100) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。

原文地址:https://blog.csdn.net/chanllenge/article/details/90637717

知识要点

面试中,有时候会问到类似new Integer(100) Integer.valueOf(100)的区别? 一般来说,对象都是在堆里创建的,所以所有对象的地址都不同,但真的是这样的吗?

这个问题,其实反应了你对java包装类型的源码了解多少,有没有真正的看过包装类型的源码。 要理解这个问题,我们首先要知道java的基本数据类型有哪些?

java基本数据类型

基本类型 包装类型 占用空间
boolean Boolean 1字节
byte Byte 2字节
char Character 2字节
short Short 2字节
int Integer 4字节
float Float 4字节
long Long 8字节
double Double 8字节

boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。

字符串的数据解析成对应的数据类型

   int x =Integer.parseInt("9");
   double c = Double.parseDouble("5");
   int b = Integer.parseInt("444",16);
   可具体参考包装类型的api

基本类型转化成string,可以直接+"",也可以转换成包装类型,使用包装类型的api来转换成string类型。

String test = 1 + "";
Integer value = Integer.valueOf("123");
String str = value.toString();
可具体参考包装类型的api

拆箱装箱