Java 类对象(Object)内容(属性值)比较(equals)

简介: Java 类对象(Object)内容(属性值)比较(equals)
  • 通常比较一个对象或者内容直接通过 ==equals 进行比较,默认比较的都是指针地址,但有时候需要比较的是两个对象的内容或者属性值是否一致。
  • 遇到这种需求的时候,要么就是便利比较一下两个对象,或者在对象里面写个比较方法进行判断,其实也是可以重写 Object 自带的 equals 方法来实现的。
  • Person.java 类对象
public class Person {
  // 对象属性
  String name;
  int age;
  // 无参构造函数
  public Person () { }
  // 有参构造函数
  public Person (String name, int age) {
    this.name = name;
    this.age = age;
  }
  // 重写 equals 方法
  @Override
  public boolean equals(Object obj) {
    // 默认走指针比较
    // return super.equals(obj);
    // 自定义对象内容比较
    // 是否是同一个对象
    if (this == obj) { return true; }
    // 是否是同一个类
    if (obj == null || getClass() != obj.getClass()) { return false; }
    // 转换为同一个类
    Person p = (Person)obj;
    // 比较内容
    if (age != p.age) { return false; }
    if (name != p.name) { return false; }
    // 返回相同
    return true;
  }
}
  • main.java 入口函数
public class test {
  public static void main(String[] args) {
    // 创建两个对象
    Person p1 = new Person();
    Person p2 = new Person();
    // Person p1 = new Person("dzm", 20);
    // Person p2 = new Person("xyq", 20);
    // == 比较,比较两个对象的指针地址
    System.out.println(p1 == p2);
    // equals 比较,默认比较两个对象的指针地址
    // System.out.println(p1.equals(p2));
    // 如果需要比较两个对象的内容是否一致,可以重写 equals 来实现
    System.out.println(p1.equals(p2));
  }
}


相关文章
|
3月前
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
276 83
|
10天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
162 101
|
10天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
179 100
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
298 120
|
4月前
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
184 35
|
15天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
49 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
2月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
3月前
|
JavaScript 前端开发 开发者
讲述Vue框架中用于对象响应式变化的Object.defineProperty函数。
综上所述,Vue.js通过 `Object.defineProperty()`提供了强大的响应式能力,使得状态管理变得简洁高效。这种能力是Vue.js受到广大开发者青睐的重要原因之一。尽管Vue 3.x使用Proxy替代了该方法,但对于Vue 2.x及其之前版本,`Object.defineProperty()`是理解Vue.js内部工作机制不可或缺的一部分。
130 27
|
2月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。

热门文章

最新文章