求解!为什么都为false

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
易萧 2020-08-01 13:21:26

如果你打开Character的equals重写方法就会看到:

public boolean equals( Object obj ){
    if( obj instanceof Character ){
        return value == ( (Character)obj ).charValue();
    }
    return false;
}

可以看到,如果obj不是Character的实例,或者不是它的子类的实例(但我们知道,Character是没有子类的),它会直接返回false。

很明显,a是Integer类型,它不是Character的实例,所以不会比较它们的值是否相等,直接就false了。


所以总结如下:

① 如果a和b都是Character,它们的值相同,但不在-128~127范围内,那么使用==号进行判定时,返回false,这是因为a和b是两个不同的对象。

② 如果a是Character,b是其它类型,即便值相同,在equals()方法中也会直接被判定会false。

好帮手慕小脸 2020-07-27 18:36:49

同学你好,这里==比较的是对象的内存地址,由于c1,d1数值超出了-128~127这个范围,会重新生成对象,并返回false。这里同学可以测试将其值更改在范围内试试哟

http://img1.sycdn.imooc.com//climg/5f1eae3a097fed2705380276.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

好帮手慕小脸 2020-07-27 14:49:52

同学你好,同学是指红框位置处为什么为false吗?

如果是,当调用equals方法时,数值虽相同,但a与c的类型是不同的。所以返回false。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 小弟阿威 #1
    为什么上面Character也是为false?
    2020-07-27 18:06:51
  • Jongls 回复 提问者 小弟阿威 #2
    Character:缓存[0,127]区间的数据 Character c1=200; Characterd1=200; c1和d1都超出了缓存区间范围,超出范围会创建新对象,两个对象之间比较的是内存地址,又因为c1和d1的内存地址不一样,所以结果为false。祝学习愉快
    2020-07-30 07:07:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师