一起學(xué)JDK源碼 -- Boolean類

boolean java基本數(shù)據(jù)類型之一,只有兩個(gè)取值:true 和 false 這種類型只作為一種標(biāo)志來記錄 true/false ,其包裝類為Boolean類,里面提供了一些處理boolean類型的方法。接下來讓我們看一下Boolean類的具體實(shí)現(xiàn)。

基礎(chǔ)知識(shí)

1.java中判斷是否相等:
java中相等的判斷有兩中方式,一種是使用操作符==,一種是使用對(duì)象的equals方法。
== :對(duì)于基本數(shù)據(jù)類型==是數(shù)值比較,且基本數(shù)據(jù)類型只能用==進(jìn)行比較,對(duì)于引用數(shù)據(jù)類型==比較的是地址值。
equals:比較兩個(gè)對(duì)象是否相等。如java中有兩個(gè)Person對(duì)象,對(duì)于現(xiàn)實(shí)中要比較這兩個(gè)人是否相同,只需要比較其姓名,身份證是否相同就可以了,在java中是兩個(gè)對(duì)象,自然有不同的地址,若是用==進(jìn)行比較這兩個(gè)Person顯示不是同一個(gè),這時(shí)就需要通過重寫equals方法實(shí)現(xiàn)自己的比較邏輯來判斷兩個(gè)Person是否相等。
2.對(duì)象的排序
java中對(duì)象是通過Collections.sort進(jìn)行排序的,有兩種情況,一種是讓對(duì)象本身具有比較的特性,對(duì)象需要實(shí)現(xiàn)Comparable接口實(shí)現(xiàn)其compareTo方法;一種是創(chuàng)建一個(gè)新的比較器類,該類要實(shí)現(xiàn)Comparator接口,實(shí)現(xiàn)其compare方法。
3.設(shè)置與獲取系統(tǒng)屬性
設(shè)置: 通過-Dkey=value的形式設(shè)置系統(tǒng)屬性
在eclipse中設(shè)置:
Run-->Run Confgurations-->然后在對(duì)話框的右邊選擇Arguments-->然后在VM arguments中輸入-Dkey=value
在命令行中設(shè)置:
java -Dkey=value -jar Test.jar
獲取:System.getProperty(propertyName)

Boolean類:

public final class Boolean implements Serializable,Comparable<Boolean>{}

可以看到Boolean類是final的不能被繼承,同時(shí)他實(shí)現(xiàn)了Comparable說明對(duì)象本身具有比較性。

主要屬性

private final boolean value;

用于保存Boolean對(duì)象的值,而且是final的,一但初始化完成,不能被修改。

public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);

全局的不可改變的兩個(gè)Boolean對(duì)象。對(duì)于布爾值也就只有兩種狀態(tài),即我們可以使用以上這兩個(gè)Boolean對(duì)象表示所有的布爾值。提供這兩個(gè)靜態(tài)變量相當(dāng)于對(duì)Boolean對(duì)象的"緩存",是為了讓開發(fā)者直接使用這兩個(gè)變量而不是每次都創(chuàng)建新的Boolean對(duì)象,這樣既節(jié)省內(nèi)存又避免了創(chuàng)建一個(gè)新實(shí)例的時(shí)間開銷。

public Boolean(boolean value) {
    this.value = value;
}
public Boolean(String s) {
    this(toBoolean(s));
}
private static boolean toBoolean(String name) {
    return ((name != null) && name.equalsIgnoreCase("true"));
}

兩種構(gòu)造方法,一種傳入boolean值,一種傳入一個(gè)字符串,傳入字符會(huì)進(jìn)行"to boolean"解析,即當(dāng)傳入的字符串忽略大小寫等于"true"時(shí)判斷為true,否則為false。
一般我們不推薦直接用構(gòu)造函數(shù)來創(chuàng)建Boolean對(duì)象,使用全局變量TRUE 、FALSE 或是使用Boolean.valueOf方法即可,避免生成不必要的對(duì)象。

parseBoolean:

public static boolean parseBoolean(String s) {
    return toBoolean(s);
}

將字符串轉(zhuǎn)換為boolean值,調(diào)用了toBoolean方法。只有當(dāng)傳入的字符串忽略大小寫為"true"時(shí)返回true否則返回false。

booleanValue:

public boolean booleanValue() {
    return value;
}

返回本對(duì)象的布爾值。

valueOf:

public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}
public static Boolean valueOf(String s) {
    return toBoolean(s) ? TRUE : FALSE;
}

valueOf方法用于返回對(duì)應(yīng)的Boolean對(duì)象,這里可以看成從"緩存"中獲取Boolean對(duì)象,因?yàn)椴紶栴愋椭挥袃煞N狀態(tài)。

toString:

public static String toString(boolean b) {
    return b ? "true" : "false";
}
public String toString() {
    return value ? "true" : "false";
}

如果為true返回字符串"true"如果為false返回字符串"false"。

hashCode:

public int hashCode() {
        return value ? 1231 : 1237;
}

true返回1231,false返回1237。

equals:

public boolean equals(Object obj) {
    if (obj instanceof Boolean) {
        return value == ((Boolean)obj).booleanValue();
    }
    return false;
}

先判斷對(duì)象是否是Boolean類型,如果是再比較它們的值是否相等。

getBoolean:

public static boolean getBoolean(String name) {
    boolean result = false;
    try {
        result = toBoolean(System.getProperty(name));
    } catch (IllegalArgumentException e) {
    } catch (NullPointerException e) {
    }
    return result;
}

根據(jù)給定的名稱查詢系統(tǒng)中是否存在該屬性,如果存在且為true則返回true,否則返回false。根據(jù)程序需要可以提前設(shè)置一些系統(tǒng)屬性,使用System.getProperty(name)獲取設(shè)置的系統(tǒng)屬性。

compareTo:

public int compareTo(Boolean b) {
    return compare(this.value, b.value);
}
public static int compare(boolean x, boolean y) {
    return (x == y) ? 0 : (x ? 1 : -1);
}

compareTo用于比較兩個(gè)布爾值的大小true大于false,compareTo調(diào)用了compare方法。(x == y) ? 0 : (x ? 1 : -1)如果相等返回0,如果不等x為true則y為false返回1,否則返回-1。compareTo是實(shí)現(xiàn)的Comparable接口中的方法,該方法返回0表示本對(duì)象與傳入的對(duì)象相等,返回正數(shù)表示本對(duì)象比傳入的對(duì)象大,返回負(fù)數(shù)表示本對(duì)象比傳入的對(duì)象小。

查看所有目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,535評(píng)論 0 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,637評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 最近馬伊琍主演的《我的前半生》算是火了,小編的爸爸媽媽姐姐同事都在看!也難怪,馬伊琍真是演技爆棚了,把劇中的人物子...
    戒咖啡cxj閱讀 429評(píng)論 0 0
  • 站在出世俯視入世, 站在入世回首出世, 站在有常窺伺無常 站在無常領(lǐng)略有常 站那山巔俯視大地 天下的烏鴉一般黑 指...
    縱情嬉戲天地間閱讀 204評(píng)論 9 2

友情鏈接更多精彩內(nèi)容