`
ilrxx
  • 浏览: 62946 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

==与equals()的区别

 
阅读更多
class A
{
    int a=1;
}
public class p142
{
    public static void main(String args[])
    {
        A obj1=new A();
        A obj2=new A();
        String s1,s2,s3="abc",s4="abc";
        s1=new String("abc");
        s2=new String("abc");
        System.out.println("s1.equals(s2)是"+(s1.equals(s2)));
        System.out.println("s1==s3是"+(s1==s3));
        System.out.println("s1.equals(s3)是"+(s1.equals(s3)));
        System.out.println("s3==s4是"+(s3==s4));  //我觉得s3!=s4,因为不是指向同一首地址
        System.out.println("s2.equals(s3)是"+(s2.equals(s3)));
        System.out.println("s1==s2是"+(s1==s2));
        System.out.println("obj1==obj2是"+(obj1==obj2));
        System.out.println("obj1.equals(obj2)是"+(obj1.equals(obj2)));  //这里我觉得
                                                                              //应该是相同的吧,内容一样啊/
        obj1=obj2;
        System.out.println("obj1=obj2后obj==obj2是"+(obj1==obj2));
        System.out.println("obj1=obj2后obj1.equals(obj2)是"+(obj1.equals(obj2)));
    }
}

(1)s3="abc",s4="abc";

这样赋值的String 对象 在java里面会先去查看一个String的常量池

如果已经创建了 ,则不再重复创建,直接指向常量池中的那个已经存在对象

s3 已经在常量池中创建了,所以s4也指向s3的那个对象

(2)equeals方法是Object的方法 默认是 按照 内存地址比较
除非你重写

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


上面是Object中equals方法,可以看到如果你不在A中重写这个方法

就会默认按照地址比较

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics