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ì)象小。