关于Integer 和Double包装类创建对象时的底层解析
2024-10-08 06:10:35
public void method1() {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//True
Integer x = 128;
Integer y = 128;
System.out.println(x == y);//False
}
如题,当数值大于等于128时,创建的俩个对象地址就不一样了,这个原因还得看Integer的源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)//-128~127
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
这个IntegerCache 数组是包装类自己创建的缓存数组,里面存放着【-128,127】的整数,当数值在这个范围时,会从这个数组中直接取值,当数值不在这个范围时,就会新建对象,所以地址就会不一样
-------------------------------------------------
那么Double类型的呢
public static void main(String[] args) {
double a = 2.0;
double b = 2.0;
Double c = 2.0;
Double d = 2.0;
System.out.println(a == b);//true
System.out.println(c == d);//false
System.out.println(a == d);//true
}
进源码
public static Double valueOf (double d){
return new Double (d) ; }
显然,Double没有Integer花里胡哨,只有调用就新建一个对象
最新文章
- tomcat加密
- RHEL6.5及Win7的和谐共处(投机版)
- C#之延迟加载
- 2)main函数在执行前和执行后有哪些操作
- 取caml查询结果的前多少行
- 网络断开后重连downloadProvider继续下载问题调试分析
- BubbleSort - 实用委托
- 同步队列-Queue模块解析
- HDOJ 4007 Dave【最大覆盖集】
- visio ppt axure AI svg powerdesign xmind
- Astyle编程语言格式化工具的说明
- AI_深度学习概论
- Ping 命令实战小结--TCP/IP协议学习
- aliyun mysql
- CF1107
- MTCNN试用
- Tensorflow timeline trace
- C++标准库addressof的应用
- Andrew Ng-ML-第九&;十章-神经网络
- JavaScript演示下Singleton设计模式