Java == 和 Equals() 区别

 1 package com.bytezreo.objectclass;
 2 
 3 import java.util.Date;
 4 
 5 /*
 6  * 
 7  * ==  和 Equals() 区别
 8  * 
 9  * 一.           ==:运算符
10  * 1.可以使用在基本数据类型变量和引用数据类型变量中
11  * 2.如果比较的是基本数据类型变量:比较两个变量保存的数据类型是否相等。(不一定类型相同)
12  *   如果比较是引用数据类型变量:比较两个变量的地址值是否相同,及两个引用是否指向同一个对象实体
13  * 
14  *  
15  * 二             equals()方法的使用:
16  *  
17  * 1.是一个方法  ,不是运算符
18  * 2.只能适用于引用数据类型
19  * 补充: == 符号使用时,必须保证符号左右两边的变量类型一致
20  * 3.Object类中equals()的定义:
21  *   public boolean equals(Object obj) {
22  *      return (this == obj);
23  *  }
24  *  说明:Object类中定义的 equals()和 ==  的用作是相同的,比较两个对象的地址值是否相同,
25  *  及两个引用是否指向同一个对象实体
26  * 
27  * 4. 像String,Date,File,包装类等都重写了Object类中的equals()方法,重写以后不是比较两个引用
28  * 的地址是否相同,而是比较两个对象的”实体内容“是否相同
29  * 
30  * 5.通常情况下,自定义的类。如果使用equals()的话,比较两个对象的地址值
31  * 如何,在自定义类中使用equals()方法,比较两个对象的内容,需要对Object类中的
32  * equals方法进行重写
33  * 重写原则:比较两个对象的实体内容是否相同.
34  * 
35  * 
36  * 
37  */
38 public class EqualsTest
39 {
40     public static void main(String[] args) {
41         
42         
43         //基本数据类型测试
44         int i =10;
45         int j = 10;
46         double d = 10.0;
47         
48         System.out.println(i == j);  //true
49         //自动类型提升
50         System.out.println(i == d);  //true
51         
52         boolean b = true;
53           
54 //        System.out.println(i == b);    不能进行比较 boolean
55         
56         char c = 10;
57         System.out.println(i ==c );  //true
58         
59         char c1 = 'A';
60         char c2 = 65;
61         System.out.println(c1 == c2); //true
62         
63         
64         //引用数据类型测试
65         Customer cust1 = new  Customer("Tom",21);
66         Customer cust2 = new  Customer("Tom",21);
67         
68         System.out.println(cust1 == cust2);   //false  地址值不一样
69         
70         String str1 = new String("zhenglei");
71         String str2 = new String("zhenglei");
72         
73         System.out.println(str1 == str2);  //false  地址值不一样
74         
75         System.out.println("------------equals-------------");
76         //没重写 equals
77         //System.out.println(cust1.equals(cust2));  //false
78         
79         //重写 equals
80         System.out.println(cust1.equals(cust2));  //true
81         
82         System.out.println(str1.equals(str2));    //true
83         
84         
85         Date date1 = new Date(23132123152123L);
86         Date date2 = new Date(23132123152123L);
87         
88         System.out.println(date1.equals(date2));  //true
89         
90         
91         
92         
93     }
94 }
 1 package com.bytezreo.objectclass;
 2 
 3 import java.util.Objects;
 4 
 5 public class Customer
 6 {
 7     private String name;
 8     private int age;
 9     public String getName() {
10         return name;
11     }
12     public void setName(String name) {
13         this.name = name;
14     }
15     public int getAge() {
16         return age;
17     }
18     public void setAge(int age) {
19         this.age = age;
20     }
21     public Customer() {
22         super();
23     }
24     public Customer(String name, int age) {
25         super();
26         this.name = name;
27         this.age = age;
28     }
29     
30     
31     
32     //自动生成  equals() 方法
33     @Override
34     public boolean equals(Object obj) {
35         System.out.println("执行自动重写 equals()方法:");
36         if (this == obj)
37             return true;
38         if (obj == null)
39             return false;
40         if (getClass() != obj.getClass())
41             return false;
42         Customer other = (Customer) obj;
43         return age == other.age && Objects.equals(name, other.name);
44     }
45     
46     //手动实现 equals()
47     //重写原则:比较两个对象的实体内容是否相同
48     
49 //    @Override
50 //    public boolean equals(Object obj)
51 //    {
52 //        System.out.println("执行手动重写 equals()方法:");
53 //      if (this == obj) 
54 //      {
55 //            return true;
56 //      }
57 //      if(obj instanceof Customer)
58 //      {
59 //          Customer cust = (Customer)obj;
60 //          //比较两个对象的每个属性是否都相同
61 ////          if(this.age == cust.age && this.name.equals(cust.name))
62 ////          {
63 ////              return true;
64 ////          }
65 ////          else
66 ////          {
67 ////              return false;
68 ////          }
69 //          
70 //          //或者
71 //          return this.age == cust.age && this.name.equals(cust.name);
72 //          
73 //          
74 //      }
75 //      return false;
76 //    }
77 //    
78     
79     
80     
81 }
  1 package com.bytezreo.objectclass;
  2 
  3 /**
  4  * 
  5  * @Description  Object类的使用
  6  * @author  Bytezero·zhenglei!      Email:420498246@qq.com
  7  * @version
  8  * @date 2021年9月24日上午9:40:35
  9  * @  
 10  * java.lang.Object类
 11  *   1.Object类是所有Java类的根父类
 12  *   2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为 java.lang.Object类
 13  *   public class Person
 14  *   {
 15  *       
 16  *   }
 17  *   
 18  *   等价于
 19  *   public class Person extends Object
 20  *   {
 21  *       
 22  *   }
 23  *   3.Object类中的功能(属性,方法)就是具有通用性
 24  *     属性:无
 25  *    
 26  *   4.Object类只声明了一个空参的构造器
 27  *   
 28  *   
 29  *   
 30  *
 31  */
 32 public class ObjectClass 
 33 {
 34     public static void main(String[] args)
 35     {
 36         Order order = new Order();
 37         //继承 class java.lang.Object
 38         System.out.println(order.getClass().getSuperclass());
 39     }
 40     
 41 }
 42 class Order
 43 {
 44      
 45 }
 46 
 47 

 

posted on 2021-09-24 13:01  Bytezero!  阅读(32)  评论(0编辑  收藏  举报