new Integer(100) 每次都会新建一个对象
Integer.valueOf(100) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。
原文地址:https://blog.csdn.net/chanllenge/article/details/90637717
面试中,有时候会问到类似new Integer(100) Integer.valueOf(100)的区别? 一般来说,对象都是在堆里创建的,所以所有对象的地址都不同,但真的是这样的吗?
这个问题,其实反应了你对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