最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入了解Java核心類庫--Objects類

 更新時間:2021年07月29日 14:54:24   作者:入錯行的北北  
這篇文章主要介紹了Java中的Object類詳細介紹,本文講解了Object類的作用、Object類的主要方法、Object類中不能被重寫的方法、Object類的equals方法重寫實例等內(nèi)容,需要的朋友可以參考下

1 Objects

1.1 Objects方法

工具類,常用于檢查操作

返回值 方法名 作用
static int checkFromIndexSize​(int fromIndex, int size, int length) 檢查子范圍[ fromIndex ,fromIndex + size)是否在 [0,length)范圍界限內(nèi)。
static int checkFromToIndex​(int fromIndex, int toIndex, int length) 檢查子范圍[ fromIndex ,toIndex)是否在 [0,length)范圍界限內(nèi)
static int checkIndex​(int index, int length) 檢查子范圍index是否在 [0,length)范圍界限內(nèi)
static int compare(T a, T b, Comparator<? super T> c) 如果參數(shù)a,b相同則返回0,否則返回c.compare(a, b)的結果
static boolean deepEquals(Object a, Object b) 對比a,b參數(shù)是否深層次相等(如果a,b為數(shù)組,則對比數(shù)組的每個參數(shù))
static boolean equals(Object a, Object b) 對比a,b參數(shù)是否相等
static int hash(Object… values) 為輸入值序列生成哈希碼
static int hashCode(Object o) 非空返回哈希碼,null則拋出NullPointerException
static boolean isNull(Object obj) obj參數(shù)為null返回true
static boolean nonNull(Object obj) obj參數(shù)不為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 ,則返回第一個參數(shù),否則返回非 null第二個參數(shù)。
static T requireNonNullElseGet​(T obj, Supplier<? extends T> supplier) 如果它是非 null ,則返回第一個參數(shù),否則返回非 null值 supplier.get() 。
static String toString(Object o) 返回對象的字符串表示形式
static String toString(Object o, String nullDefault) 如果第一個參數(shù)不是 null ,則返回第一個參數(shù)調(diào)用 toString的結果,否則返回第二個參數(shù)

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 區(qū)別于Object

2.1 Object構造方法

public Object()

  • Object類是基類,是所有類的父類(基類)
  • 如果一個類沒有明確的繼承某一個具體的類,則將默認繼承Object類

例如我們定義一個類:

public class Person{
}
其實它被使用時 是這樣的:
public class Person extends Object{
}

  • object的多態(tài):使用Object可以接收任意的引用數(shù)據(jù)類型

例:

public static void main(String[] args){
	String text = "123";
	say(text);
	int a = 10;
	say(a);
	say("123");
}
public static void say(Object o){//多態(tài)的體現(xiàn)
	System.out.println(o);
}

2.2 Object其他方法

返回值 方法名 作用
static int checkFromIndexSize​(int fromIndex, int size, int length) 檢查子范圍[ fromIndex ,fromIndex + size)是否在 [0,length)范圍界限內(nèi)。
static int checkFromToIndex​(int fromIndex, int toIndex, int length) 檢查子范圍[ fromIndex ,toIndex)是否在 [0,length)范圍界限內(nèi)
static int checkIndex​(int index, int length) 檢查子范圍index是否在 [0,length)范圍界限內(nèi)
static int compare(T a, T b, Comparator<? super T> c) 如果參數(shù)a,b相同則返回0,否則返回c.compare(a, b)的結果
static boolean deepEquals(Object a, Object b) 對比a,b參數(shù)是否深層次相等(如果a,b為數(shù)組,則對比數(shù)組的每個參數(shù))
static boolean equals(Object a, Object b) 對比a,b參數(shù)是否相等
static int hash(Object… values) 為輸入值序列生成哈希碼
static int hashCode(Object o) 非空返回哈希碼,null則拋出NullPointerException
static boolean isNull(Object obj) obj參數(shù)為null返回true
static boolean nonNull(Object obj) obj參數(shù)不為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 ,則返回第一個參數(shù),否則返回非 null第二個參數(shù)。
static T requireNonNullElseGet​(T obj, Supplier<? extends T> supplier) 如果它是非 null ,則返回第一個參數(shù),否則返回非 null值 supplier.get() 。
static String toString(Object o) 返回對象的字符串表示形式
static String toString(Object o, String nullDefault) 如果第一個參數(shù)不是 null ,則返回第一個參數(shù)調(diào)用 toString的結果,否則返回第二個參數(shù)

2.2.1 equals(Object obj)

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

  • equals方法在非null對象引用上實現(xiàn)等價關系
  • 等于
    • 對于任何非空引用值x和y,當且僅當x和y引用同一對象( x == y具有值true )時,此方法返回true
  • ==比的是內(nèi)存地址
  • 請注意,通常需要在重寫此方法時覆蓋hashCode方法,以便維護hashCode方法的常規(guī)協(xié)定,該方法聲明相等對象必須具有相等的哈希代碼。
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;//此時指向相同的內(nèi)存地址
        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 ,多次調(diào)用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());
}

默認為字符串,通常返回一個“文本表示”此對象的字符串,返回對象的內(nèi)存地址(對象實例的類名稱@對象的哈希碼的無符號十六進制,即: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 { }
}

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • Java服務限流算法的6種實現(xiàn)

    Java服務限流算法的6種實現(xiàn)

    服務限流是指通過控制請求的速率或次數(shù)來達到保護服務的目的,本文主要介紹了Java服務限流算法的6種實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • Spring中BeanFactory?FactoryBean和ObjectFactory的三種的區(qū)別

    Spring中BeanFactory?FactoryBean和ObjectFactory的三種的區(qū)別

    關于FactoryBean?和?BeanFactory的對比文章比較多,但是對ObjectFactory的描述就比較少,今天我們對比下這三種的區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Java輸入輸出流復制文件所用時間對比

    Java輸入輸出流復制文件所用時間對比

    這篇文章主要介紹了Java輸入輸出流復制文件所用時間對比的相關資料,非常不錯,具有參考解決價值,需要的朋友可以參考下
    2016-08-08
  • Java布隆過濾器的原理和實現(xiàn)分析

    Java布隆過濾器的原理和實現(xiàn)分析

    數(shù)組、鏈表、樹等數(shù)據(jù)結構會存儲元素的內(nèi)容,一旦數(shù)據(jù)量過大,消耗的內(nèi)存也會呈現(xiàn)線性增長所以布隆過濾器是為了解決數(shù)據(jù)量大的一種數(shù)據(jù)結構。本文就來和大家詳細說說布隆過濾器的原理和實現(xiàn),感興趣的可以了解一下
    2022-10-10
  • springboot接收JSON實現(xiàn)示例解析

    springboot接收JSON實現(xiàn)示例解析

    這篇文章主要為大家介紹了springboot如何接收JSON的實現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 如何用Java的swing編寫簡單計算器

    如何用Java的swing編寫簡單計算器

    這篇文章主要給大家介紹了關于如何用Java的swing編寫簡單計算器的相關資料,通過本文可以設計一個圖形界面的簡易計算器,完成簡單的算術運算符,可以完成加法、減法、乘法、除法和取余運算,需要的朋友可以參考下
    2023-12-12
  • SpringBoot實現(xiàn)Tomcat集群的會話管理功能

    SpringBoot實現(xiàn)Tomcat集群的會話管理功能

    在使用 Tomcat 集群時,由于每個 Tomcat 實例的 Session 存儲是獨立的,導致無法實現(xiàn) Session 的共享,這可能影響到用戶跨節(jié)點的訪問,為了實現(xiàn)跨 Tomcat 實例共享 Session,可以使用 Spring Session 配合 Redis 進行集中式會話管理,需要的朋友可以參考下
    2024-12-12
  • java實現(xiàn)哈夫曼壓縮與解壓縮的方法

    java實現(xiàn)哈夫曼壓縮與解壓縮的方法

    這篇文章主要介紹了java實現(xiàn)哈夫曼壓縮與解壓縮的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • break和continue的作用和區(qū)別解析(案例分析)

    break和continue的作用和區(qū)別解析(案例分析)

    break和continue都是用來控制循環(huán)結構的,主要作用是停止循環(huán),這篇文章主要介紹了break和continue的作用和區(qū)別,需要的朋友可以參考下
    2023-03-03
  • 基于Spring p標簽和c標簽注入方式

    基于Spring p標簽和c標簽注入方式

    這篇文章主要介紹了Spring p標簽和c標簽注入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

鄂托克旗| 新余市| 锦州市| 如东县| 阳江市| 哈尔滨市| 凤阳县| 全椒县| 博白县| 柘荣县| 翁源县| 马龙县| 青川县| 上思县| 周口市| 龙岩市| 澜沧| 汝阳县| 科尔| 新乡县| 久治县| 玉林市| 商洛市| 淄博市| 开远市| 泗洪县| 苏尼特左旗| 吴忠市| 安新县| 乌什县| 若尔盖县| 辽中县| 闽侯县| 三原县| 柳州市| 湟源县| 阿克陶县| 赣州市| 郓城县| 泗水县| 广元市|