Java_语法基础_谨慎包装类型的大小比较
2015-04-09 21:02
288 查看
基本类型是可以比较大小的,其所对应的包装类型都实现了Comparable接口也说明了此问题,那我们来比较一下两个包装类型的大小,代码如下:
代码很简单,产生了两个Integer对象,然后比较两者的大小关系,既然基本类型和包装类型是可以自由转换的,那上面的代码是不是就可打印出两个相等的值呢?让事实说话,运行结果如下:
false
false
false
竟然是3个false,也就是说两个值不等,也没大小关系,这也太奇怪了吧。不奇怪,我们来一一解释。
i==j
在Java中“==”是用来判断两个操作数是否有相等关系的,如果是基本类型则判断值是否相等,如果是对象则判断是否是一个对象的两个引用,也就是地址是否相等,这里很明显是两个对象,两个地址,不可能相等。
i > j和i < j
在Java中,“>”和“<”用来判断两个数字类型的大小关系,注意只能是数字型的判断,对于Integer包装类型,是根据其intValue()方法的返回值(也就是其相应的基本类型)进行比较的(其他包装类型是根据相应的value值来比较的,如doubleValue、floatValue等),那很显然,两者不可能有大小关系的。
问题清楚了,修改总是比较容易的,直接使用Integer实例的compareTo方法。但是这类问题的产生更应该说是习惯问题,只要是两个对象之间的比较就应该采用相应的方法,而不是通过Java的默认机制来处理,除非你确定对此非常了解
package deep; public class Client { public static void main(String[] args) { Integer i = new Integer(100); Integer j = new Integer(100); compare(i, j); } /** * @Description 比较两个包装对象大小 * @author 田爽 * @date 2015年4月9日下午8:51:33 */ private static void compare(Integer i, Integer j) { System.out.println(i == j); System.out.println(i > j); System.out.println(i < j); } }
代码很简单,产生了两个Integer对象,然后比较两者的大小关系,既然基本类型和包装类型是可以自由转换的,那上面的代码是不是就可打印出两个相等的值呢?让事实说话,运行结果如下:
false
false
false
竟然是3个false,也就是说两个值不等,也没大小关系,这也太奇怪了吧。不奇怪,我们来一一解释。
i==j
在Java中“==”是用来判断两个操作数是否有相等关系的,如果是基本类型则判断值是否相等,如果是对象则判断是否是一个对象的两个引用,也就是地址是否相等,这里很明显是两个对象,两个地址,不可能相等。
i > j和i < j
在Java中,“>”和“<”用来判断两个数字类型的大小关系,注意只能是数字型的判断,对于Integer包装类型,是根据其intValue()方法的返回值(也就是其相应的基本类型)进行比较的(其他包装类型是根据相应的value值来比较的,如doubleValue、floatValue等),那很显然,两者不可能有大小关系的。
问题清楚了,修改总是比较容易的,直接使用Integer实例的compareTo方法。但是这类问题的产生更应该说是习惯问题,只要是两个对象之间的比较就应该采用相应的方法,而不是通过Java的默认机制来处理,除非你确定对此非常了解
相关文章推荐
- Java老鸟遇到的坑--java基础类型对应的包装类比较大小
- [改善Java代码] 谨慎包装类型的大小比较
- 提高你的Java代码质量吧:谨慎包装类型的比较
- Java_语法基础_提防包装类型的null值
- [疯狂Java]面向对象:基本类型的包装器类型、自动装箱/拆箱、包装器类型大小/相等比较
- Java包装类型的大小比较需谨慎
- 提高你的Java代码质量吧:谨慎包装类型的比较
- Java基础重温(八)类型比较操作符--instanceof
- java例程练习(控制台参数与基础数据类型的包装类)
- java例程练习(控制台参数与基础数据类型的包装类)
- 黑马程序员——Java基础语法(一)—关键字、标识符、数据类型、运算符
- Java基础类型的包装类传值NullPoint问题
- Java基础复习:基本数据类型的包装类
- Java私塾跟我学系列――JAVA篇 第二章 基础语法数据类型(1)
- JAVA DATE类型数据比较判断大小方法
- 黑马程序员———Java的基础语法和数据类型、数组
- java基础知识4-变量比较,类型转换
- java例程练习(基础数据类型的包装类)
- java例程练习(控制台参数与基础数据类型的包装类)
- 在JAVA中怎么比较Double类型数据的大小?