A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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");
        }       
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

正序浏览
首先,要明确“==”和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

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
楼主,你主要是问什么?没弄明白,感觉你所问并不是标题处写的问题!!
回复 使用道具 举报
自己又写得这成程序,大家看看,应该就是用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
               
        }       
}
回复 使用道具 举报
equals是所有类的父类Object中的一个方法,String已经重写了这个方法,你可以打开jdk的源码看看啊。你也可以自己重写。
回复 使用道具 举报
这个地方时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:}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
String中的equals是Java中写好的,String类不能继承,所以你不能重写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马