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

来源:互联网 发布:数据分析python 编辑:程序博客网 时间:2024/05/15 06:54

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

本文为本人学习心得笔记,如有不对的地方,望各位看官不吝指出

在实际代码开发中总是会碰到封装类和基本数据类型的比较,但相同的值比较结果是否为true,总是似是而非,本人对几种类型的比较做了以下实验:

一、 Integer和int的比较

代码为:

int num1 = 127;Integer num2 = 127;Integer num3 = num1;Integer num4 = 128;Integer num5 = 128;int num6 = 128;System.out.println("num1 == num2 的结果为:"+(num1 == num2));System.out.println("num2 == num3 的结果为:"+(num2 == num3));System.out.println("num4 == num5 的结果为:"+(num4 == num5));System.out.println("num5 == num6 的结果为:"+(num5 == num6));

结果为:

num1 == num2 的结果为:truenum2 == num3 的结果为:truenum4 == num5 的结果为:falsenum5 == num6 的结果为:true

结果分析:

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

  2. 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除外,这两个没有缓存)

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

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

二、 Long和int的比较

关于Long和long的比较久不在赘述了,其相关比较和实验一中相似
代码为:

Long lon = 130L;int in = 130;System.out.println("lon == in 的结果为:"+(lon == in));

结果为:

lon == in 的结果为:true

结果分析:
1. 其实这个也很好理解,,只是在其中多了个基本数据类型的隐式转换,先是将Long对象拆箱为long基本数据类型,然后in会隐式转换为long,然后比较,所以结果为true;
2. 这里不单单是Long和int,只要是封装类和基本数据类型相比较,只要实际值相同,结果一般都应为true(Boolean 除外);

三、隐式转换

由低—>高,可以隐式自动转换,数据类型将自动提升。
其转换顺序为:
byte—>short—>int—>long—>float—>double
char–>int–>…….(后面同上)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发出油厉害怎么办民间小偏方 你帮助别人别人却想着害你怎么办 怀孕接触有辐射的东西回怎么办 苹果手机用久了有点卡怎么办 4s店把我车撞了怎么办 长安之星2代大灯高不聚光怎么办 被电动车撞了人跑了怎么办 车被电动车撞了对方跑了怎么办 房子卖了户口没地方迁怎么办 酷派大神f2开不开机怎么办 酷派手机玩游戏竖屏怎么办 身上起红疙瘩很痒怎么办越挠越多 苹果6s指纹解锁坏了怎么办 案子结了网上追逃的怎么办 贷款买的手机不还了会怎么办 支付宝手机号没用了登陆不了怎么办 支付宝绑定的手机号注销了怎么办 考勤机进水了不能识别指纹怎么办? 网商银行人脸识别失败怎么办 电脑网页上的字变小了怎么办 把光驱换成固态硬盘后不识别怎么办 相机内存卡电脑读不出来怎么办 sd卡在电脑上无法格式化怎么办 内存卡突然读不出来了怎么办 怀孕两个月胎儿死在腹中怎么办 香港公司在大陆卖地皮资金怎么办 结婚证上的身份证号码错了怎么办 身份证快过期了人在外地怎么办 邮政电话银行登录密码忘记了怎么办 如果欠了3w不敢和家里说怎么办 大四学生欠了3w该怎么办 房子付了首付贷款贷不下来怎么办 浙江嵊泗人在金华丢了身份证怎么办 一证5号够了怎么办新卡 微信号被盗实名认证是自己的怎么办 苹果微信登录显示被盗风险怎么办 在诈骗公司上班被公安抓了怎么办 在国外护照不小心撕坏了怎么办 在俄罗斯护照超期拉黑应该怎么办 俄罗斯五年定居护照丢了怎么办 百家号文章质量分一直在下降怎么办