深入了解Java核心类库??Objects类

这篇文章主要介绍了Java中的Object类详细介绍,本文讲解了Object类的作用、Object类的主要方法、Object类中不能被重写的方法、Object类的equals方法重写实例等内容,需要的朋友可以参考下

深入了解Java核心类库??Objects类,久久派带你了解更多相关信息。

目录
  • 1 Objects
    • 1.1 Objects方法
    • 1.2 Objects常用方法
      • 1.2.1 equals(Object a, Object b)
      • 1.2.2 isNull(Object obj)
      • 1.2.3 nonNull(Object obj)
      • 1.2.4 requireNonNull(T obj)
    • 1.3 Objects源码
    • 2 区别于Object
      • 2.1 Object构造方法
        • 2.2 Object其他方法
          • 2.2.1 equals(Object obj)
          • 2.2.2 toString()
        • 2.3 Object源码
        • 总结

          1 Objects

          1.1 Objects方法

          工具类,常用于检查操作

          返回值 方法名 作用
          static int checkFromIndexSize​(int fromIndex, int size, int length) 检查子范围[ fromIndex ,fromIndex + size)是否在 [0,length)范围界限内。
          static int checkFromToIndex​(int fromIndex, int toIndex, int length) 检查子范围[ fromIndex ,toIndex)是否在 [0,length)范围界限内
          static int checkIndex​(int index, int length) 检查子范围index是否在 [0,length)范围界限内
          static int compare(T a, T b, Comparator<? super T> c) 如果参数a,b相同则返回0,否则返回c.compare(a, b)的结果
          static boolean deepEquals(Object a, Object b) 对比a,b参数是否深层次相等(如果a,b为数组,则对比数组的每个参数)
          static boolean equals(Object a, Object b) 对比a,b参数是否相等
          static int hash(Object… values) 为输入值序列生成哈希码
          static int hashCode(Object o) 非空返回哈希码,null则抛出NullPointerException
          static boolean isNull(Object obj) obj参数为null返回true
          static boolean nonNull(Object obj) obj参数不为null返回true
          static T requireNonNull(T obj) 检查指定的对象引用不是 null,为null则抛出NullPointerException
          static T requireNonNull(T obj, String message) 检查指定的对象引用不是null,否则抛出自定义的NullPointerException
          static T requireNonNull​(T obj, Supplier messageSupplier) 检查指定的对象引用是否为null ,如果是,则抛出自定义的NullPointerException 。
          static T requireNonNullElse​(T obj, T defaultObj) 如果它是非 null ,则返回第一个参数,否则返回非 null第二个参数。
          static T requireNonNullElseGet​(T obj, Supplier<? extends T> supplier) 如果它是非 null ,则返回第一个参数,否则返回非 null值 supplier.get() 。
          static String toString(Object o) 返回对象的字符串表示形式
          static String toString(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 { }}

          总结

          本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注趣讯吧的更多内容!

          版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/8174.html

          (0)
          nan
          上一篇 2021-07-29
          下一篇 2021-07-29

          相关推荐

          • 长沙游客不满8根炸串115元,与商家发生口角后被骂“穷逼” !

            4月26日,湖南长沙。一名游客发视频爆料自己在“大长沙美食城寨”花115元买了8根炸串,与商家发生口角后被骂“穷逼”,一旁的人劝阻说:“你不要再跟他们吵了,你就过来玩玩算了。”五一临近,居然还有这样的事情发生,已经可以算的上是给自己的城市抹黑了吧。不过也有很多网友纷纷表示本地人去了都要被宰一刀才能走

            热点头条 2023-04-27
            0
          • 9月18日圆明园免费入园(圆明园游玩攻略最新的)

            圆明园是我国非常著名的一座历史遗址,很多人曾慕名而去,在9月18日这个重要的日子里,也有很多人打算去圆明园参观,9月18日圆明园免费入园,下面大家就跟久久派小编来了解一下圆明园游玩攻略最新的吧!9月18日圆明园免费入园据圆明园遗址公园官微消息,全民国防教育日

            2021-09-18
            0
          • 非常全面的Python常见基础面试题及答案

            Python是目前编程领域最受欢迎的语言,Python可用于许多领域,Web应用程序开发,自动化,数学建模,大数据应用程序等等,这篇文章主要给大家介绍了关于Python常见基础面试题及答案的相关资料,需要的朋友可以参考下

            2021-09-01
            0
          • 网络营销案例分析,互联网营销具体是做哪些工作的

            我做过几年互联网营销的工作网络营销案例分析,举几个例子回答一下这个问题1搜索引擎营销,属于早期比较经典的互联网营销,主要做关键词优化和广告投放2目前比较流行的内容营销,生产优质内容,图文视频等来吸引粉丝,粉丝再变现以上两点个人认为是比较有代表

            2022-01-16
            0
          • 微信视频号有啥用(视频号是什么)

            说到视频号,大家第一印象就会想到腾讯旗下的微信视频号,确实咱们说的也就是微信视频号。它是一个以图片和视频为主的内容展现平台,可以直接通过手机端来发布,跟订阅号、公众号、服务号不一样,不需要通过PC端来发布内容。今天我们来普及一下视频号,最近有部分人在

            2022-01-14 热点头条
            0
          • 2021国庆出游回京是否要做核酸检测?国庆去哪旅游比较好

            从目前国内的疫情来看,不少人在出行的时候还是会比较关心是否要进行核酸检测或者是隔离,那么一般来讲低风险的地区来回是不需要做核酸检测的,那么在即将到来的国庆节是怎么样的,2021国庆出游回京是否要做核酸检测,国庆去哪旅游比较好,那么接下来大家

            2021-09-19
            0

          发表回复

          登录后才能评论