java类型比较_Java类型比较的问题

注:本文适用于JDK1.6及JDK1.7,更高的JDK版本未验证过。

做Java开发的都知道“==”和equals的区别,基本数据类型的值比较的时候使用“==”,对象类型的值比较的时候用equals。当然,这些都是最基本,这里只是顺便提一下。

下面来说一些特殊的情况:

第一种情况,对于基本数据类型的包装类,例如int对应的Integer,有时候可能也会使用“==”去比较,数值介于-128~127(含-128和127)之间不会有问题,因为Java虚拟机会在内存里缓存这部分数据,但是在这个范围之外的比较使用“==”就有问题了。代码如下,一看就懂:

// 注:节省篇幅,注释省掉了

public class TestInteger {

public static void main(String[] args) {

Integer int1 = 108;

Integer int2 = 108;

Integer int3 = 168;

Integer int4 = 168;

int i1 = 168;

System.err.println(int1 == int2); // true

System.err.println(int3 == int4); // false

System.err.println(int3.equals(int4)); // true

System.err.println(int3 == i1); // true

}

}

结论:对于对象数据类型,不论是不是包装类,一律使用equals来比较对象的值。(在elipse里可以通过findbugs检查出此类问题)

第二种情况,对于枚举类Java开发人员应该也比较熟悉。枚举类的比较需要注意,看枚举类的源码也知道,枚举类在比较时并未进行类型检查,Java的语法也没有做这件事情,这意味着在有些测试不充分的情况下容易犯错误。代码如下:

// 注:节省篇幅,注释省掉了

public class TestEnum {

public static void main(String[] args) {

Integer int1 = 0;

System.err.println(EFruit.apple.equals(int1)); // false 类型虽不同,Java语法并没有强制检查

System.err.println(EFruit.apple.getId().equals(int1)); // true

}

public enum EFruit {

apple(0, "苹果"), orange(1, "桔子"), banana(2, "香蕉");

private Integer id;

private String name;

private EFruit(Integer id, String name) {

this.id = id;

this.name = name;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

}

结论:在进行枚举类的比较时,要多留点心,要意识到可能有坑。

感谢你浏览此文,欢迎交流。勿喷,你没给钱我也不欠你的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值