黑马程序员技术交流社区

标题: 这个程序时怎么在String中重写equals是方法的 [打印本页]

作者: lanbuohan    时间: 2013-5-22 22:05
标题: 这个程序时怎么在String中重写equals是方法的
class Test_B2
{
        public static void main(String[] args)
        {
                //相当定义的一个字符串,字符串都相等。
                String str1 = "hello";
                String str2 = "hello";
               
                if(str1 == str2)
                {
                        System.out.println("str1 == str2");       
                }       
                else
                {
                        System.out.println("str1 !== str2");
                }
               
               
                String str3 = new String("hello");
                String str4 = new String("hello");
                if(str3 == str4)
                {
                        System.out.println("str3 == str4");       
                }       
                else
                {
                        System.out.println("str3 !== str4");
                }
               
               
                if(str3.equals(str4))//此处答案是true,难点。
                {
                        System.out.println("str3.equals(str4) == true");       
                }
               
                System.out.println("Hello World");
        }       
}
作者: 徐启坤    时间: 2013-5-22 22:11
String中的equals是Java中写好的,String类不能继承,所以你不能重写
作者: 高波    时间: 2013-5-22 22:16
这个地方时String的equals方法,重写了Object中的equals方法。可以在API中查到,下面是API中关于String equals方法的注解:
public boolean equals(Object anObject)
将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
覆盖:
类 Object 中的 equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。

希望对你有用{:soso_e113:}
作者: SOAR    时间: 2013-5-22 22:17
equals是所有类的父类Object中的一个方法,String已经重写了这个方法,你可以打开jdk的源码看看啊。你也可以自己重写。
作者: lanbuohan    时间: 2013-5-22 22:35
自己又写得这成程序,大家看看,应该就是用String将equals重写,但是原理还不很明白,有人说这里还有哈希码的知识。
如果有哪个大牛明白原理,请告知小弟。
public class Test_B3
{
        public static void main(String[] args)
        {
                String s1 = "sun java",s2 = "Sun Java";
                System.out.println(s1.charAt(1));
                System.out.println(s1.equals(s2));
               
                String s3 = new String();
                String s4 = new String();
                System.out.println(s3.equals(s4));//结果是true
               
        }       
}
作者: 棉/mg花/x糖    时间: 2013-5-22 22:46
楼主,你主要是问什么?没弄明白,感觉你所问并不是标题处写的问题!!
作者: 火之意志    时间: 2013-5-22 23:13
首先,要明确“==”和equals()的区别,object类中的equals()方法是最原始的,它的原理就两个对象做“==”比较,看参考jdk1.7中src压缩包中的源码,也可以在eclipse中查看object类的equals()方法源码;而String类中的equals()方法是被重写过的,不再是做“==”单纯的地址比较,equals()方法是比较两个字符串对象的内容,  String s3 = new String();  String s4 = new String();是两个对象,他们的地址值不同,s3==s4;这样写是false。但是s3,s4是被新创建的字符串对象,都是调用无参构造方法,也没有任何的赋值动作,所以他们都是空字符串对象,所以内容相同,所以   System.out.println(s3.equals(s4));//结果是true






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2