【1.JDK底层源码剖析】1.1 Objects常用方法的源码剖析

Objects 类常用方法源码剖析(基于 Java 11)

Objects 类是 Java 7 引入的一个工具类,包含一系列静态方法,用于对象操作、空指针检查、哈希计算等常见操作。这些方法大多是空指针安全的(null-safe),在设计上有助于减少冗长的空值检查代码,提高代码健壮性和可读性。本文将结合 Java 11 源码,剖析 Objects 类的常用方法。

1. Objects 类概述

Objects 类位于 java.util 包中,是一个不可实例化的工具类(final 类,私有构造器抛出 AssertionError)。

public final class Objects {
   
   
    private Objects() {
   
   
        throw new AssertionError("No java.util.Objects instances for you!");
    }
    // 静态方法...
}

它不同于 java.lang.Object:Object 是所有类的超类,而 Objects 是操作对象的工具类。

2. 常用方法源码剖析

2.1 equals(Object a, Object b)

源码实现:

public static boolean equals(Object a, Object b) {
   
   
    return (a == b) || (a != null && a.equals(b));
}

功能说明:
比较两个对象是否相等。它是空指针安全的。

代码分析:

  • 首先使用 == 比较,如果引用相同(包括都为 null)则直接返回 true
  • 如果第一个参数 a 不为 null,则调用 aequals 方法进行内容比较。
  • 避免了直接调用 a.equals(b) 可能导致的 NullPointerException

示例:

String s1 = null;
String s2 = "hello";
// 不会抛出 NullPointerException
boolean result = Objects.equals(s1, s2); // 返回 false

2.2 deepEquals(Object a, Object b)

源码实现:

public static boolean deepEquals(Object a, Object b) {
   
   
    if (a == b)
        return true;
    else if (a == null || b == null)
        return false;
    else
        return Arrays.deepEquals0(a, b);
}

功能说明:
用于“深度比较”两个对象,尤其适用于数组。如果两个数组的元素逐个深度相等,则数组本身深度相等。

代码分析:

  • 先进行引用比较和 null 检查。
  • 若两者均非 null,则调用 Arrays.deepEquals0 进行深度比较。该方法会递归比较数组中的元素。

示例:

int[] a1 = {
   
   1, 2, 3};
int[] a2 = {
   
   1, 2, 3}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值