提高你的Java代码质量吧:谨慎包装类型的比较

本文探讨了Java中包装类型与基本类型比较时出现的错误理解。虽然包装类型实现了Comparable接口,但使用'=='和'>','<'进行比较时会因对象地址和值的差异导致错误结果。建议在比较对象时使用适当的方法,避免依赖默认的比较机制。" 117632214,10295197,Android自定义手机震动强度,"['Android开发', '手机震动', '系统服务', '权限管理']
摘要由CSDN通过智能技术生成

一、分析 

基本类型可以比较大小,其所对应的包装类型都实现了Comparable接口此问题  

二、场景 

代码如下 

public class Client{ 
    public static void main(String[] args){ 
        Integer i = new Integer(100); 
        Integer j = new Integer(100); 
        compare(i,j); 
    } 
} 
 
public static void compare(Integer I, Integer j){ 
    System.out.println(i == j); 
    System.out.println(i > j); 
    System.out.println(i < j); 
} 

既然基本类型和包装类型是可以自由转换的,那上面的代码的输出结果是不是可以打印两个值相等呢?运行结果如下 

false 

false 

false 


竟然是3个false,我们来一一解释: 

I == j:在Java中“==”是用来判断两个操作数是否相等关系的,如果基本类型是判断值是否相等,如果是对象则判断地址是否相等。这里很明显是两个对象,两个地址不相等。 

i > j 和i < j:">"和"<"用来判断两个数字类型的大小关系,注意只能是数字类型的判断,对于Integer包装类型,是根据intValue()方法的返回值(也就是相应的基本类型)进行比较的。显然两者是相等的,没有大小关系 


三、建议 

问题分析清楚了,只要是两个对象之间的比较,就应该采用相应的方法,而不是通过Java的默认机制">","<"等机制来处理。除非你确定对此非常了解


新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值