为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门第三季,2-2,我用equals()方法来测验左边知识点代码时的疑问?

Java入门第三季,2-2,我用equals()方法来测验左边知识点代码时的疑问?

Java_Hello_World 2016-03-20 21:08:14
代码如图,用equals()方法比较s1,s2,s3,s4,结果都是相等,没有重写的equals()比较的不是内存地址吗?应该和==一样才对啊? public class Test { public static void main(String[] args) { // TODO Auto-generated method stub String s1="imooc"; String s2="imooc"; String s3=new String("imooc"); String s4=new String("imooc"); System.out.println(s1==s2); System.out.println(s1==s3); System.out.println(s3==s4); if(s1.equals(s3)){ System.out.println("equal."); }else{ System.out.println("not equal."); } s1="Welcome to "+s1; System.out.println(s1); } }并且,当我想重写equals()方法的时候,eclipse提示说不能重写,这又是为什么呢?
查看完整描述

5 回答

已采纳
?
haooooo

TA贡献2条经验 获得超3个赞

1.Object类里面,equal方法默认是比较内存地址。Object源码:

 public boolean equals(Object obj) {
        return (this == obj);
    }

String类里面重写了equals方法,比较的是字符串的值。因此值一样就返回true。

2.String类是final类型的,不能继承,不能重写。不能重写的并不是equals方法,而是String这个类本身就不能被继承

public final class String

查看完整回答
3 反对 回复 2016-03-20
  • Java_Hello_World
    Java_Hello_World
    谢谢,忙了一阵,没上来学习。 虽然还不能完全弄懂你说的,不过已经知道自己的问题所在了。
?
36925814

TA贡献1条经验 获得超1个赞

String类  内部已经重写了equals()方法,因而提示不能重写

查看完整回答
1 反对 回复 2016-03-21
?
rookie2maven

TA贡献278条经验 获得超76个赞

String 为final类型无法继承所以无法重写。


查看完整回答
反对 回复 2016-03-23
?
妖精づ凯文

TA贡献5条经验 获得超0个赞

String类  内部已经重写了equals()方法,因而提示不能重写,只要两个字符串的字符内容相同,就返回true,不必关心内存地址。而==就要保证内存地址也得一样。

查看完整回答
反对 回复 2016-03-20
?
qq电子时代

TA贡献5条经验 获得超2个赞

String s2="imooc";       与        String s3=new String("imooc");

这两个是不一样的,new 的存在就是分配地址用的,而后一种是放在常量池中的

你一下次再用这种方法去创建的时候,就会去常量池里面找,所以

String s1="imooc";   与        String s2="imooc";

这两个是相同的,指向常量池中的"imooc"

String s3=new String("imooc");    与    String s4=new String("imooc");

这两个是不同的地址,尽管他们的内容是一样的。
就像有两个人,他们的名字都是imooc,但是并不是一个人。

查看完整回答
反对 回复 2016-03-21
  • 5 回答
  • 0 关注
  • 1534 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信