“==”与"equals(object)"的区别

一、对于基本数据类型而言只能用“==”,不能用equals来进行比较,若使用equals来进行比较,则不能通过编译

二、在非字符串的对象的比较中:

             “==”与“equals()”比较的均是对象在堆内存中分配的首地址。(即使比较两个变量是否指向同一个对象)

class Student {
    private String name;
    private int age;
    public Student(){}
    public Student(String name,int age)
    {
        this.name=name;
        this.age=age;
    }
}

public class B1  { 
      public static void main(String as[])
      {  
        Student a= new Student("张三",21);
        Student b=new Student("张三",21);
        System.out.println(a==b);//false
        System.out.println(a.equals(b));//false
      }
     
    }

 

运行结果:

 

不仅是上面这个例子会返回false,只要是在未重写equals方法的所有非字符串的类的实例的比较均会返回false:Object类中定义的equals方法是比较引用地址,而每个对象的引用地址又不相同,所以都会返回false

解决方法

           想要得到比较对象里的内容的真实结果,就得重写equals()方法。

在上面的例子中重写equals()方法:

       省略掉与上面例子完全相同的B1类,修改Student的代码如下:

 

class Student {
    private String name;
    private int age;
    public Student(){}
    public Student(String name,int age)
    {
        this.name=name;
        this.age=age;
    }
    public boolean equals(Object a)
    {   if(a==null)
            return false;
       if(!(a instanceof Student))
           return false;
       Student student=(Student) a;
       return this.name.equals(student.name)&&this.age==student.age;
        
    }
}

 

 

 

运行结果如下:

 

三、在字符串对象的比较中的区别:

                           “==”,比较的是首地址

                       equals(): 比较的是里面的内容。

下面通过一个例子来详细讲解:

public class D { 
      public static void main(String as[])
      {  
          String x1=new String("aass");
            String x2=new String("aass");
            String x3=new String(x1);
            System.out.println(x1.equals(x2));//返回true;里面的内容相同
            System.out.println(x1==x2);//返回false;x1与x2不是同一个对象,所以首地址不同
            System.out.println(x1==x3);//返回false;理由同上
            System.out.println(x1.equals(x3));//返回true;里面的内容都是“aass”
            
            String a1="abc";
            String a2="abc";
            String  a3=new String("abc");
            System.out.println(a1==a2);//返回true;
            System.out.println(a1==a3);//返回false
      }
     
    }

运行结果为:

 

posted @ 2017-10-01 17:44  ky09  阅读(267)  评论(0编辑  收藏  举报