==和equals

  • == 首先用在比较基本类型数据时,比较的是值是否相同,用在比较引用类型,则比较的是引用地址是否相同。
  • equals 是Object的一个方法,在没有被重写的情况下,是和==等效的,在被重写的情况下一般比较的是内容是否相同,比如常见的String,Integer等类都重写了equals方法,比较的是内容是都相同。
  • 一些特殊情况下的比较

    1.当使用==比较两个字符串时,

    String a = "1" ;  String b = "1";   此时 a == b为true,

    但如果String a = new String("1"); String b = new String("1")则 a == b 为false。

    这是因为通过字面量赋值的字符串的地址都是在常量池中共享的,所以引用地址相同,但通过其他方式创建的字符串则不在常量池中。

    2.当使用==比较Integer类型数据时。

    Integer a = 1; Integer b = 1; 此时 a == b为true,

    Integer a = 128; Integer b = 128; 此时 a == b为false,

    Integer a = new Integer(1); Integer b = new Integer(2); 此时 a == b 为false;

    出现上述原因:Integer包装类在被加载时,会执行其一个静态方法,将-128~127的Integer对象存放在一个数组中缓存,在通过字面量赋值或者Integer.valueOf()方式赋值使用时如果需要的是在-128~127之间的Integer对象,则直接在缓存中获取不再重新创建,所以上述第一种情况是true,当超过这个范围则会重新创建对象,所以第二种情况为false。第三种情况则是直接使用构造方法创建的不同的实例引用地址不同,所以为false。

    3.其他包装类型对象类似。

所有综上:基本类型比较相等使用==,引用类型比较时如果比较内容建议使用重写的equals方法比较(包括包装类型比较大小时,建议使用compareTo()方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值