Java中的equals() 与 “==“的区别

equals() 与 == 的区别是什么?

        

        "==" : 它的作用是判断两个对象的地址是不是相等。即,判断引用是否指向同一个对象;

        equals():它的作用也是判断两个对象是否相等。但它一般有两种使用情况;

                        情况1,类没有重写equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
                         情况2,类重写了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。

        通过示例比较它们的区别

import java.util.*;
  import java.lang.Comparable;
  
  /**
   *  
   *
   * @author Nailuo
   *  444485888@qq.com
   */
 public class EqualsTest{
 
     public static void main(String[] args) {
         // 新建2个相同内容的Student对象,
         // 再用equals比较它们是否相等
         Student s1 = new Student("nailuo", 100);
        Student s2 = new Student("nailuo", 100);
         System.out.printf("s1.equals(s2) : %s\n", s1.equals(s2));
         System.out.printf("s1==s2 : %s\n", s1==s2);
     }
 
     /**
      * Student类。
      */
     private static class Student{
         int age;
         String name;

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

         public String toString() {
             return name + " - " +age;
         }
 
         /** 
          *  重写equals方法 
          */  
         @Override
         public boolean equals(Object obj){  
             if(obj == null){  
                 return false;  
             }  
               
             //如果是同一个对象返回true,反之返回false  
             if(this == obj){  
                 return true;  
             }  
               
             //判断是否类型相同  
             if(this.getClass() != obj.getClass()){  
                 return false;  
             }  
               
             Student student= (Student)obj;  
             return name.equals(student.name) && age==student.age;  
         } 
     }
 }

 运行结果:

s1.equals(s2) : true
s1==s2 : false

 在EqualsTest.java 中:
 1 s1.equals(s2)  : 这是判断s1和s2的内容是否相等。因为Student重写equals()方法,而这个equals()是用来判断s1和s2的内容是否相等,s1和s2的内容相等;因此,返回true。

2  s1==s2 : 这是判断s1和s2引用(地址)是否指向同一个对象。由于它们是各自新建的两个Student对象,引用不同;因此,返回false。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值