提高你的Java代码质量吧:谨慎包装类型的比较
2013-07-24 19:57
162 查看
一、分析
基本类型可以比较大小,其所对应的包装类型都实现了Comparable接口此问题。
二、场景
代码如下:
既然基本类型和包装类型是可以自由转换的,那上面的代码的输出结果是不是可以打印两个值相等呢?运行结果如下:
false
false
false
竟然是3个false,我们来一一解释:
I == j:在Java中“==”是用来判断两个操作数是否相等关系的,如果基本类型是判断值是否相等,如果是对象则判断地址是否相等。这里很明显是两个对象,两个地址不相等。
i > j 和i < j:">"和"<"用来判断两个数字类型的大小关系,注意只能是数字类型的判断,对于Integer包装类型,是根据intValue()方法的返回值(也就是相应的基本类型)进行比较的。显然两者是相等的,没有大小关系。
三、建议
问题分析清楚了,只要是两个对象之间的比较,就应该采用相应的方法,而不是通过Java的默认机制">","<"等机制来处理。除非你确定对此非常了解。
基本类型可以比较大小,其所对应的包装类型都实现了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的默认机制">","<"等机制来处理。除非你确定对此非常了解。
相关文章推荐
- 提高你的Java代码质量吧:谨慎包装类型的比较
- [改善Java代码] 谨慎包装类型的大小比较
- 提高你的Java代码质量吧:提防包装类型的null值
- 提高你的Java代码质量吧:提防包装类型的null值
- 提高你的Java代码质量吧:用整数类型处理货币
- 提高你的Java代码质量吧:不要让类型默默转换
- 提高你的Java代码质量吧:用整数类型处理货币
- Java_语法基础_谨慎包装类型的大小比较
- 提高你的Java代码质量吧:三元操作符的类型陷阱
- 提高你的Java代码质量吧:避免基本类型数组转换列表陷阱(Arrays.asList())
- 提高你的Java代码质量吧:不要让类型默默转换
- [改善Java代码]提防包装类型的null值
- 【如何提高Java代码质量:频繁插入和删除时使用LinkedList 】
- 异常封装提高Java代码质量
- 提高你的Java代码质量吧:受检异常尽可能转化为非受检异常
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- Java相同类型的两个对象比较属性值,得到不同属性的名称和对应的值,附代码实例
- 提高你的Java代码质量吧:不要在finally块中处理返回值
- 提高你的Java代码质量吧:多使用异常,把性能问题放一边
- 提高你的Java代码质量吧:中文字符串排序的瑕疵