== 和 equals的区别

==:
   1.基本数据类型,比较值是否相等
   2.对象:
     比较两个对象的地址是否相等

equals:
   equals比较的是类中的内容是否相等。由于所有的类都继承Object类,所以当该类中没有重写equals()方法时,继续调用的是父类中的equals()方法,这个方法比较的是两个类的地址是否相等
   由于StringBuffer里面没有重写equals()方法,当比较两个StringBuffer对象的时候,会默认比较两个对象的地址,即便值相等,也会返回false.
   正确的方法,转成String比较或者其他

String s1 ="abc";
        String s2 = "abc";
        String s3 = new String("abc");
        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//false
        System.out.println(s1.equals(s3));//true

原因:s1和s2指定同一块内存区域,"abc" , s3又重新开辟了一块地区。当时用==时候比较地址 ,当时用equals的时候比较内容

class Student{
    int no;
    String name;
    Student(){
    }
    Student(int no,String name){
        this.no = no;
        this.name = name;
    }
}

class Student1{
    int no;
    String name;
    Student1(){
    }
    Student1(int no,String name){
        this.no = no;
        this.name = name;
    }


    public boolean equals(Student1 obj) {
        return this.no == obj.no && this.name == obj.name;
    }

    public boolean equals1(Student1 obj){
        return this.no == obj.no && this.name.equals(obj.name);
    }
}

 Student stu1 = new Student(1,"你好");
        Student stu2 = new Student(1,"你好");
        System.out.println(stu1 == stu2);//false
        System.out.println(stu1.equals(stu2));//false


        Student1 stu3 = new Student1(1,"你好") ;
        Student1 stu4 = new Student1(1,"你好") ;
        System.out.println(stu3.equals(stu4));//true
        System.out.println(stu3.equals1(stu4));//true

原因:Student中使用equals方法,默认使用Object中的equals方法,比较的是两个对象的地址是否相等

           Student1中自定义equals方法(可以重写父类equals方法),比较两个对象中的值是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值