返回顶部
首页 > 资讯 > 精选 >Java中如何使用Objects类
  • 446
分享到

Java中如何使用Objects类

2023-06-20 18:06:31 446人浏览 独家记忆
摘要

Java中如何使用Objects类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 Objects1.1 Objects方法工具类,常用于检查操作返回值方法名作用static

Java中如何使用Objects类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

    1 Objects

    1.1 Objects方法

    工具类,常用于检查操作

    返回值方法名作用
    static intcheckFromIndexSize(int fromIndex, int size, int length)检查子范围[ fromIndex ,fromIndex + size)是否在 [0,length)范围界限内。
    static intcheckFromToIndex(int fromIndex, int toIndex, int length)检查子范围[ fromIndex ,toIndex)是否在 [0,length)范围界限内
    static intcheckIndex(int index, int length)检查子范围index是否在 [0,length)范围界限内
    static intcompare(T a, T b, Comparator<? super T> c)如果参数a,b相同则返回0,否则返回c.compare(a, b)的结果
    static booleandeepEquals(Object a, Object b)对比a,b参数是否深层次相等(如果a,b为数组,则对比数组的每个参数)
    static booleanequals(Object a, Object b)对比a,b参数是否相等
    static inthash(Object… values)为输入值序列生成哈希码
    static inthashCode(Object o)非空返回哈希码,null则抛出NullPointerException
    static booleanisNull(Object obj)obj参数为null返回true
    static booleannonNull(Object obj)obj参数不为null返回true
    static TrequireNonNull(T obj)检查指定的对象引用不是 null,为null则抛出NullPointerException
    static TrequireNonNull(T obj, String message)检查指定的对象引用不是null,否则抛出自定义的NullPointerException
    static TrequireNonNull(T obj, Supplier messageSupplier)检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException 。
    static TrequireNonNullElse(T obj, T defaultObj)如果它是非 null ,则返回第一个参数,否则返回非 null第二个参数。
    static TrequireNonNullElseGet(T obj, Supplier<? extends T> supplier)如果它是非 null ,则返回第一个参数,否则返回非 null值 supplier.get() 。
    static StringtoString(Object o)返回对象的字符串表示形式
    static StringtoString(Object o, String nullDefault)如果第一个参数不是 null ,则返回第一个参数调用 toString的结果,否则返回第二个参数

    1.2 Objects常用方法

    1.2.1 equals(Object a, Object b)

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

    1.2.2 isNull(Object obj)

    isNull(Object obj)源码:
    public static boolean isNull(Object obj) {
    return obj == null;
    }

    1.2.3 nonNull(Object obj)

    nonNull(Object obj)源码:
    public static boolean nonNull(Object obj) {
    return obj != null;
    }

    1.2.4 requireNonNull(T obj)

    requireNonNull(T obj)源码:
    public static T requireNonNull(T obj) {
    if (obj == null)
    throw new NullPointerException();
    return obj;
    }

    1.3 Objects源码

    package java.util;import jdk.internal.util.Preconditions;import jdk.internal.vm.annotation.ForceInline;import java.util.function.Supplier;public final class Objects {    private Objects() {        throw new AssertionError("No java.util.Objects instances for you!");    }    public static boolean equals(Object a, Object b) {        return (a == b) || (a != null && a.equals(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);    }    public static int hashCode(Object o) {        return o != null ? o.hashCode() : 0;    }    public static int hash(Object... values) {        return Arrays.hashCode(values);    }    public static String toString(Object o) {        return String.valueOf(o);    }    public static String toString(Object o, String nullDefault) {        return (o != null) ? o.toString() : nullDefault;    }    public static <T> int compare(T a, T b, Comparator<? super T> c) {        return (a == b) ? 0 :  c.compare(a, b);    }    public static <T> T requireNonNull(T obj) {        if (obj == null)            throw new NullPointerException();        return obj;    }    public static <T> T requireNonNull(T obj, String message) {        if (obj == null)            throw new NullPointerException(message);        return obj;    }    public static boolean isNull(Object obj) {        return obj == null;    }    public static boolean nonNull(Object obj) {        return obj != null;    }    public static <T> T requireNonNullElse(T obj, T defaultObj) {        return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");    }    public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {        return (obj != null) ? obj                : requireNonNull(requireNonNull(supplier, "supplier").get(), "supplier.get()");    }    public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {        if (obj == null)            throw new NullPointerException(messageSupplier == null ?                                           null : messageSupplier.get());        return obj;    }    @ForceInline    public static    int checkIndex(int index, int length) {        return Preconditions.checkIndex(index, length, null);    }    public static int checkFromToIndex(int fromIndex, int toIndex, int length) {        return Preconditions.checkFromToIndex(fromIndex, toIndex, length, null);    }    public static int checkFromIndexSize(int fromIndex, int size, int length) {        return Preconditions.checkFromIndexSize(fromIndex, size, length, null);    }}

    2 区别于Object

    2.1 Object构造方法

    public Object()

    • Object类是基类,是所有类的父类(基类)

    • 如果一个类没有明确的继承某一个具体的类,则将默认继承Object类

    例如我们定义一个类:

    public class Person{
    }
    其实它被使用时 是这样的:
    public class Person extends Object{
    }

    • object的多态:使用Object可以接收任意的引用数据类型

    例:

    public static void main(String[] args){String text = "123";say(text);int a = 10;say(a);say("123");}public static void say(Object o){//多态的体现System.out.println(o);}

    2.2 Object其他方法

    返回值方法名作用
    static intcheckFromIndexSize(int fromIndex, int size, int length)检查子范围[ fromIndex ,fromIndex + size)是否在 [0,length)范围界限内。
    static intcheckFromToIndex(int fromIndex, int toIndex, int length)检查子范围[ fromIndex ,toIndex)是否在 [0,length)范围界限内
    static intcheckIndex(int index, int length)检查子范围index是否在 [0,length)范围界限内
    static intcompare(T a, T b, Comparator<? super T> c)如果参数a,b相同则返回0,否则返回c.compare(a, b)的结果
    static booleandeepEquals(Object a, Object b)对比a,b参数是否深层次相等(如果a,b为数组,则对比数组的每个参数)
    static booleanequals(Object a, Object b)对比a,b参数是否相等
    static inthash(Object… values)为输入值序列生成哈希码
    static inthashCode(Object o)非空返回哈希码,null则抛出NullPointerException
    static booleanisNull(Object obj)obj参数为null返回true
    static booleannonNull(Object obj)obj参数不为null返回true
    static TrequireNonNull(T obj)检查指定的对象引用不是 null,为null则抛出NullPointerException
    static TrequireNonNull(T obj, String message)检查指定的对象引用不是null,否则抛出自定义的NullPointerException
    static TrequireNonNull(T obj, Supplier messageSupplier)检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException 。
    static TrequireNonNullElse(T obj, T defaultObj)如果它是非 null ,则返回第一个参数,否则返回非 null第二个参数。
    static TrequireNonNullElseGet(T obj, Supplier<? extends T> supplier)如果它是非 null ,则返回第一个参数,否则返回非 null值 supplier.get() 。
    static StringtoString(Object o)返回对象的字符串表示形式
    static StringtoString(Object o, String nullDefault)如果第一个参数不是 null ,则返回第一个参数调用 toString的结果,否则返回第二个参数
    2.2.1 equals(Object obj)

    equals(Object obj)源码:
    public boolean equals(Object obj) {
    return (this == obj);
    }

    • equals方法在非null对象引用上实现等价关系

    • 等于

      • 对于任何非空引用值x和y,当且仅当x和y引用同一对象( x == y具有值true )时,此方法返回true

    • ==比的是内存地址

    • 请注意,通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希代码。

    public static void main(String[] args) {        Person p = new Person(1234,"张三");        Person e = new Person(2345,"李四");        System.out.println("p:"+p.hashCode());//p:1239731077        System.out.println("e:"+e.hashCode());//e:357863579        System.out.println(p.equals(e));//false        e=p;//此时指向相同的内存地址        System.out.println("e:"+e.hashCode());//e:1239731077        System.out.println(p.equals(e));//true}

    输出结果:
    p:1239731077
    e:357863579
    false
    e:1239731077
    true

    equals方法重写时的五个特性:

    自反性 :对于任何非空的参考值x , x.equals(x)应该返回true 。
    对称性 :对于任何非空引用值x和y , x.equals(y)应该返回true当且仅当y.equals(x)返回true 。
    传递性 :对于任何非空引用值x ,y和z ,如果x.equals(y)回报true并且y.equals(z)返回true,x.equals(z)应该返回true 。
    一致性 :对于任何非空引用值x和y ,多次调用x.equals(y)始终返回true或始终返回false ,前提是未修改对象上的equals比较中使用的信息。
    非空性 :对于任何非空的参考值x , x.equals(null)应该返回false 。

    2.2.2 toString()

    toString()源码
    public String toString() {
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }

    默认为字符串,通常返回一个“文本表示”此对象的字符串,返回对象的内存地址(对象实例的类名称@对象的哈希码的无符号十六进制,即:getClass().getName() + ‘@' + Integer.toHexString(hashCode()))

    public static void main(String[] args) {        Person p = new Person(1234,"张三");        Person e = new Person(2345,"李四");        System.out.println("e.getClass():"+e.getClass());        System.out.println("e.hashCode():"+e.hashCode());        System.out.println("e.toString():"+e.toString());}

    输出结果:
    e.getClass():class com.company.demo.Person
    e.hashCode():114132791
    e.toString():com.company.demo.Person@6cd8737

    • 建议重写Object中的toString方法

    2.3 Object源码

    package java.lang;import jdk.internal.HotSpotIntrinsicCandidate;public class Object {    private static native void reGISterNatives();    static {        registerNatives();    }    @HotSpotIntrinsicCandidate    public Object() {}    @HotSpotIntrinsicCandidate    public final native Class<?> getClass();    @HotSpotIntrinsicCandidate    public native int hashCode();    public boolean equals(Object obj) {        return (this == obj);    }    @HotSpotIntrinsicCandidate    protected native Object clone() throws CloneNotSupportedException;    public String toString() {        return getClass().getName() + "@" + Integer.toHexString(hashCode());    }    @HotSpotIntrinsicCandidate    public final native void notify();    @HotSpotIntrinsicCandidate    public final native void notifyAll();    public final void wait() throws InterruptedException {        wait(0L);    }    public final native void wait(long timeoutMillis) throws InterruptedException;    public final void wait(long timeoutMillis, int nanos) throws InterruptedException {        if (timeoutMillis < 0) {            throw new IllegalArgumentException("timeoutMillis value is negative");        }        if (nanos < 0 || nanos > 999999) {            throw new IllegalArgumentException(                                "nanosecond timeout value out of range");        }        if (nanos > 0) {            timeoutMillis++;        }        wait(timeoutMillis);    }    protected void finalize() throws Throwable { }}

    看完上述内容,你们掌握Java中如何使用Objects类的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

    --结束END--

    本文标题: Java中如何使用Objects类

    本文链接: https://lsjlt.com/news/299070.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java中如何使用Objects类
      Java中如何使用Objects类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 Objects1.1 Objects方法工具类,常用于检查操作返回值方法名作用static ...
      99+
      2023-06-20
    • Java中如何使用Collection类
      Java中如何使用Collection类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Collection接口Collection是最基本的集合接口,一个Collectio...
      99+
      2023-06-17
    • Java中如何使用Math类
      这篇文章将为大家详细讲解有关Java中如何使用Math类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java常用类库Math类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平...
      99+
      2023-06-20
    • Java中FileWriter类如何使用
      今天就跟大家聊聊有关Java中FileWriter类如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。FileWriter字符输出流构造方法public FileWri...
      99+
      2023-06-20
    • Java中File类如何使用
      这篇文章主要介绍“Java中File类如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中File类如何使用”文章能帮助大家解决问题。概述要学习Java中的File类,首先我们要知道,在...
      99+
      2023-06-29
    • Java中Message类和Queue类如何使用
      Java中Message类和Queue类如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Message类package com.example....
      99+
      2023-06-17
    • 如何在Java中使用Field类
      如何在Java中使用Field类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Field 成员变量的介绍每个成员变量有类型和值。java.lang.reflec...
      99+
      2023-06-14
    • 如何在Java中使用Arrays类
      如何在Java中使用Arrays类?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、...
      99+
      2023-06-14
    • 如何在java中使用Label类
      如何在java中使用Label类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种...
      99+
      2023-06-14
    • Java中如何使用内部类
      这期内容当中小编将会给大家带来有关Java中如何使用内部类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 内部类很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用...
      99+
      2023-06-20
    • 如何在Java 中使用File类
      这期内容当中小编将会给大家带来有关如何在Java 中使用File类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。File类  1.只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问。pa...
      99+
      2023-05-31
      java ava file
    • Date类如何在Java中使用
      Date类如何在Java中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Date类在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,...
      99+
      2023-05-31
      java date dat
    • Calendar类如何在Java中使用
      这篇文章将为大家详细讲解有关Calendar类如何在Java中使用 ,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Calendar类从JDK1.1版本开始,在处理日期和时间时,系统推荐使用C...
      99+
      2023-05-31
      java calendar ava
    • 如何在java中使用Byte类
      这期内容当中小编将会给大家带来有关如何在java中使用Byte类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统...
      99+
      2023-06-06
    • 如何在java中使用泛型类
      如何在java中使用泛型类?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系...
      99+
      2023-06-15
    • java 中的内部类如何使用
      这篇文章将为大家详细讲解有关java 中的内部类如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java 中内部类的实例详解一:内部类可直接访问外部类的成员变量,包括外部类私有的成员变...
      99+
      2023-05-31
      java ava
    • Java ThreadLocal类如何使用
      今天小编给大家分享一下Java ThreadLocal类如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。如图...
      99+
      2023-07-02
    • 如何使用Java Optional类
      这篇文章主要讲解了“如何使用Java Optional类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Java Optional类”吧!注意:示例代码要求使用Java 11及更高版本...
      99+
      2023-06-02
    • 如何在java中使用类加载器
      今天就跟大家聊聊有关如何在java中使用类加载器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3...
      99+
      2023-06-14
    • 如何在Java中使用EasyExcel工具类
      今天就跟大家聊聊有关如何在Java中使用EasyExcel工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web M...
      99+
      2023-06-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作