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
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15329879.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)