织梦CMS - 轻松建站从此开始!

亿万先生-亿万先生mr007-亿万先生老虎机

当前位置: 主页 > 亿万先生网上娱乐 >

(亿万先生网上娱乐) 关于Object中的equals方法和S

时间:2017-07-06 21:35来源:未知 作者:admin 点击:
首先是这段代码: public class test { public static void main(String[] args) { String s1 = "Monday"; String s2 = new String("Monday"); if (s1 == s2){ System.out.println("s1 == s2");} else{ System.out.println("s1 != s2"); } if (s1.equ

首先是这段代码:

public class test {
    public static void main(String[] args) {
        String s1 = "Monday";
        String s2 = new String("Monday");
        if (s1 == s2){
            System.out.println("s1 == s2");}
        else{
            System.out.println("s1 != s2");
        }
        if (s1.equals(s2)) {
            System.out.println("s1 equals s2");
        }else{
            System.out.println("s1 not equals s2");
        }
    }
}

输出结果是:s1 != s2 和 s1 equals s2; 这个我可以理解,使用new操作符后,在堆内存中又新开辟了一块空间,s1和s2在堆内存中的值相同,但是引用的地址不同。但是在博客园的这篇文章看到下面这段代码:

public class test{
    public static void main(String[] args)
    {
        test obj1 = new test();
        test obj2 = new test();

        if(obj1 == obj2){
            System.out.println("obj1 == obj2");
        }else{
            System.out.println("obj1 != obj2");
        }
        if(obj1.equals(obj2)){
            System.out.println("obj1 equals obj2");
        }else{
            System.out.println("obj1 not equals obj2");
        }
    }
}

输出: obj1 != obj2 obj1 not equals obj2
昨天晚上看了那篇文章的评论,把我自己的理解写出来,但是还是不是很清楚,我大意是这样的:
java当中所有类都继承自Object这个基类,在Object中的定义了一个equals方法,这个方法的初始化行为是比较对象的内存地址值(Object的equals方法使用==比较的),但在一些类库中这个方法被覆盖掉了,比如String, Interger, Date这些类中equals有其自己的实现方法,String类继承自Object类,也继承了equals方法,但是重写了该方法,不再比较类在堆内存中的存放地址了,而是比较存在堆中的值。 ???
这个解释不知道对不对,望指教,还有,关于obj1 not equals obj2你们是怎么看的??

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容