Java包装类型的大小比较需谨慎

原创 2016年05月31日 06:36:09
基本类型是可以比较大小的,其所对应的包装类型都实现了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);
    }
}
代码很简单,产生了两个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提供了自动装箱、自动拆箱的概念,使得代码简洁很多。 然而,里面还是有坑!!! 直接上代码 public static void main(String[] args) {   ...
  • u011453631
  • u011453631
  • 2017年02月15日 23:15
  • 461

Java包装类与基本类型进行比较的坑

Java包装类与基本类型进行比较的坑
  • a158123
  • a158123
  • 2017年08月09日 18:58
  • 857

java 判断包装类类型总结

判断字符串if("testString" instanceof String) { //是字符串类型 }其他包装类,用法一致 Byte 、Short、Integer、Long、Float、D...
  • u010503822
  • u010503822
  • 2017年09月27日 10:53
  • 221

Java包装类型的大小比较需谨慎

基本类型是可以比较大小的,其所对应的包装类型都实现了Comparable 接口也说明了此问题,那我们来比较一下两个包装类型的大小,代码如下: public class Client {     p...
  • softn
  • softn
  • 2016年05月31日 06:36
  • 292

Java 包装类的比较

当我们在利用'=='比较基本类型时,比较的是值   但是==运算符用于比较包装器对象时,是检测对象是否值向同一个存储区域。因此以下的比较通常不成立:Integer a = 1000; Integ...
  • BigBird2012
  • BigBird2012
  • 2011年07月07日 19:42
  • 1383

java equal和==的比较,尤其注意基本类型和基本类型的包装类型的比较

java中equals方法和“==”的区别:  equals 方法是 java.lang.Object 类的方法。  有两种用法说明:  (1)对于字符串变量来说,使用“==”和“e...
  • u011467537
  • u011467537
  • 2015年02月12日 11:52
  • 2529

Java中判断两个对象是否相等

在Java中我们如果想确定两个对象是否相等,有不少种方法,这里将会简要解释 对于基本数据类型,我们可以直接用“==”进行判断,相等则返回true,反之则返回false。 对与引用类型的比较 假设有两...
  • wyky481l
  • wyky481l
  • 2017年03月29日 17:45
  • 1668

解读java的包装类

Java是面向对象语言,在她的世界里充满了对象,对象让我们更好地彼此沟通,但是在java中有一块区域是不具备对象特性的,就是基本数据类型(boolean,byte,short,character,in...
  • zheng_zeng_pan
  • zheng_zeng_pan
  • 2011年09月10日 17:05
  • 896

Java中的Integer和int等包装类和基本数据类型简单比较

在初学JAVA时我们接触到的都是一些基本的数据类型,比如int , float,double等。但是对于高等语言JAVA等面向对象的语言来说,一切都是对象。如此看来这些基本数据类型显得就有些‘单薄’-...
  • nishuihanliu
  • nishuihanliu
  • 2016年05月08日 11:20
  • 2960

Java八大基本类型详解与包装类

java八大基本类型: 整型: byte: byte数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byt...
  • lv_hang515888
  • lv_hang515888
  • 2016年06月30日 14:55
  • 10822
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java包装类型的大小比较需谨慎
举报原因:
原因补充:

(最多只允许输入30个字)