java封装类和基本数据类型的比较

您所在的位置:网站首页 integer值的比较 java封装类和基本数据类型的比较

java封装类和基本数据类型的比较

2024-07-09 21:58| 来源: 网络整理| 查看: 265

num1 == num2 的结果为:true,可见Integer对象和int数据类型比较,只要数值相同,==比较的结果为true;**其比较原理为:先将num2对象调用其intValue方法拆箱成基本数据类型int,然后在用拆箱后的int类型的值和num1比较,故其结果为true;**另:其几种类型和其封装类比较亦是如此;

num2 == num3 的结果为:true,这可能会奇怪,这个明明是两个对象的比较,怎么会true呢,其实这个是Integer的缓存原因,在Integer num2 = 127;这句代码赋值中,前面定义的是封装类声明,而后面是基本数据类型int的值,按理说是会报错的,但java有自己的自动拆箱(unboxing)&自动装箱(boxing)机制,此时会将后面的int基本数据类型装箱封装成Integer对象,而装箱调用的是Integer.valueOf(int i)方法,说了这么多终于说到重点了,缓存就是在valueOf这个方法中的,让我们先看这段代码: 这里写图片描述 当i的值在low和high之间时,是不创建对象的,直接在缓存中取,这里low为-128,high为127,即当int值为-128~127之间时,自动装箱时,是不创建对象的,直接从缓存中获取,因为num2和num3在自动装箱时均是在缓存中获取的,故均为同一个对象,所以同对象相比较当然是true了;其它封装类的比较亦是如此(Double和Float除外,这两个没有缓存)

num4 == num5 的结果为:false,经过上述2中的解释,这个结果的原因就显然易得了,因为128不在缓存的范围内,所以各自创建了对象,不同对象相比较,结果为false;

num5 == num6 的结果为:true,此为验证int和Integer值相同相比较是否受缓存限制,结果为true,显然是不受的,,但此步有点鸡肋了,细想这个的1中已经解释清楚了,是拆箱,拆箱后就都是基本数据类型了;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3