包装类比较的坑

文章讲述了Java中包装类如Integer和Double在使用equals()和compareTo()进行比较时的规则。equals()会检查对象是否为相同类型并比较值,而compareTo()则只允许同类型间的比较。对于不同包装类之间的==比较,由于引用不同,结果总是false。正确的比较方式是先转换为同类型再进行比较。
摘要由CSDN通过智能技术生成

equals

private final int value;

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
private final double value;

public boolean equals(Object obj) {
        return (obj instanceof Double)
               && (doubleToLongBits(((Double)obj).value) ==
                      doubleToLongBits(value));
    }

参数是Object类型,传基本数据类型会先装箱。整形字面量封装成Integer,浮点型封装成Double。
都是先判断你是不是相同的类型,不是就直接返回false了。
不是int和double类型的包装类和基本数据类型比较直接返回false了
只有int和Integer 、double和Double会接着比较值。

compareTo

	//Integer的比较方法
    public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
    }

	//Double的比较方法
    public int compareTo(Double anotherDouble) {
        return Double.compare(value, anotherDouble.value);
    }

	//Float的比较方法
    public int compareTo(Float anotherFloat) {
        return Float.compare(value, anotherFloat.value);
    }

比较只能和同类型的比较。不能和不同类型的比较
Float的compareTo传double就会报错

==比较大小

不同包装类==比较不会自动拆箱。
不同的引用地址永远都是false

正确的包装类比较

每个包装类都有将数据装换为byte、short、int、long、float、double的方法。
他们都继承自Number类。先转换成同类型再比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值