先来看一段代码:
public class Main{
public static void main(String[] args){
Integer num1 = 100;
Integer num2 = 100;
Integer num3 = 200;
Integer num4 = 200;
'''//输出结果'''
System.out.println(num1==num2);
System.out.println(num3==num4);
}
}
猜猜结果是什么?
很多人都会认为结果全为true,但结果去不是这样的
true
false
为什么是这样的结果?如果用内存来解释结果的话,num1和num2指向的是同一个对象,而num3和num4则指向的确是不同的对象。接下来就告诉你为什么,看一看Integer类型的valueof方法的源码:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
return new Integer(i);
}
其中IntegerCache的实现:
'''// IntegerCache,一个内部类,注意它的属性都是定义为static final'''
private static class IntegerCache {
static final int high; '''//缓存上界,暂为null'''
static final Integer cache[]; '''//缓存的整型数组'''
'''// 块,为什么定义为块'''
static {
final int low = -128; '''// 缓存下界,不可变了。只有上界可以改变'''
'''// high value may be configured by property'''
'''// h值,可以通过设置jdk的AutoBoxCacheMax参数调整(以下有解释),自动缓存区间设置为[-128,N]。注意区间的下界是固定'''
int h = 127;
if (integerCacheHighPropValue != null) {
'''// Use Long.decode here to avoid invoking methods that'''
'''// require Integer's autoboxing cache to be initialized'''
// 通过解码integerCacheHighPropValue,而得到一个候选的上界值'''
int i = Long.decode(integerCacheHighPropValue).intValue();
'''// 取较大的作为上界,但又不能大于Integer的边界MAX_VALUE'''
i = Math.max(i, 127);
'''// Maximum array size is Integer.MAX_VALUE'''
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h; '''//上界确定'''
'''// 就可以创建缓存块,注意缓存数组大小'''
cache = new Integer[(high - low) + 1]; //
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++); '''// -128到high值逐一分配到缓存数组'''
}
private IntegerCache() {}
}
通过这两段代码可以看出,在通过valueof方法创建Integer类型对象时,取值范围为[-128,127],数值在这个区间里,指针指向IntegerCache.cache中已经存在的对象引用,当数值超出这个范围,就会创建一个新的对象。
有一点需要注意的是,并不是所有的类型都是这个范围,看Double类型:
public class Main{
public static void main(String[] args){
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
最终的输出结果:
false
false
具体为什么回事这样的结果,大伙可以去看看源代码中Double valueof方法的实现,其和Integer valueof方法不同,是因为在某个范围内的整型数值的个数是有限的,而浮点数却不是。
注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
Double、Float的valueOf方法的实现是类似的。
拉下了一个,Boolean类型的结果有两个True or False。直接看源代码:
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
而其中的TRUE和FALSE是这样定义的:
public static final Boolean TRUE = new Boolean(true); '''/** ''' '''* The <code>Boolean</code> object corresponding to the primitive ''' '''* value <code>false</code>. ''' '''*/''' public static final Boolean FALSE = new Boolean(false);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java拆箱
# Java装箱
# Java拆装箱
# Java中的装箱和拆箱深入理解
# 浅谈Java自动装箱与拆箱及其陷阱
# java自动装箱拆箱深入剖析
# .NET 中的装箱与拆箱实现过程
# 再议C#中的装箱与拆箱的问题详解
# 解析C#中的装箱与拆箱的详解
# C#实现装箱与拆箱操作简单实例
# c#装箱和拆箱知识整理
# C#装箱和拆箱原理详解
# 轻松学习C#的装箱与拆箱
# 的是
# 都是
# 是这样
# 源代码
# 整型
# 就会
# 是因为
# 在这个
# 很多人
# 告诉你
# 下了
# 回事
# 可以通过
# 可以看出
# 但又
# 这几个
# 设置为
# 创建一个
# 需要注意
# 大家多多
相关文章:
如何在阿里云完成域名注册与建站?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何高效搭建专业期货交易平台网站?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何通过IIS搭建网站并配置访问权限?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何在建站之星绑定自定义域名?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
制作公司内部网站有哪些,内网如何建网站?
如何做静态网页,sublimetext3.0制作静态网页?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何在阿里云服务器自主搭建网站?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
javascript中的try catch异常捕获机制用法分析
活动邀请函制作网站有哪些,活动邀请函文案?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
Python如何创建带属性的XML节点
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何在云服务器上快速搭建个人网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
公司网站的制作公司,企业网站制作基本流程有哪些?
建站主机选购指南与交易推荐:核心配置解析
建站之星安装步骤有哪些常见问题?
如何选择建站程序?包含哪些必备功能与类型?
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何选择域名并搭建高效网站?
购物网站制作公司有哪些,哪个购物网站比较好?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
建站之星伪静态规则如何正确配置?
Python多线程使用规范_线程安全解析【教程】
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
建站主机类型有哪些?如何正确选型
智能起名网站制作软件有哪些,制作logo的软件?
如何快速搭建二级域名独立网站?
如何在香港服务器上快速搭建免备案网站?
如何选择高效便捷的WAP商城建站系统?
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站之星安装模板失败:服务器环境不兼容?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何在服务器上三步完成建站并提升流量?
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何高效完成独享虚拟主机建站?
建站上传速度慢?如何优化加速网站加载效率?
如何通过服务器快速搭建网站?完整步骤解析
Python lxml的etree和ElementTree有什么区别
学校建站服务器如何选型才能满足性能需求?
*请认真填写需求信息,我们会在24小时内与您取得联系。