一起学JDK源码 -- Boolean类

boolean java基本数据类型之一,只有两个取值:true 和 false 这种类型只作为一种标志来记录 true/false ,其包装类为Boolean类,里面提供了一些处理boolean类型的方法。接下来让我们看一下Boolean类的具体实现。

基础知识

1.java中判断是否相等:
java中相等的判断有两中方式,一种是使用操作符==,一种是使用对象的equals方法。
== :对于基本数据类型==是数值比较,且基本数据类型只能用==进行比较,对于引用数据类型==比较的是地址值。
equals:比较两个对象是否相等。如java中有两个Person对象,对于现实中要比较这两个人是否相同,只需要比较其姓名,身份证是否相同就可以了,在java中是两个对象,自然有不同的地址,若是用==进行比较这两个Person显示不是同一个,这时就需要通过重写equals方法实现自己的比较逻辑来判断两个Person是否相等。
2.对象的排序
java中对象是通过Collections.sort进行排序的,有两种情况,一种是让对象本身具有比较的特性,对象需要实现Comparable接口实现其compareTo方法;一种是创建一个新的比较器类,该类要实现Comparator接口,实现其compare方法。
3.设置与获取系统属性
设置: 通过-Dkey=value的形式设置系统属性
在eclipse中设置:
Run-->Run Confgurations-->然后在对话框的右边选择Arguments-->然后在VM arguments中输入-Dkey=value
在命令行中设置:
java -Dkey=value -jar Test.jar
获取:System.getProperty(propertyName)

Boolean类:

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

可以看到Boolean类是final的不能被继承,同时他实现了Comparable说明对象本身具有比较性。

主要属性

private final boolean value;

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

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

全局的不可改变的两个Boolean对象。对于布尔值也就只有两种状态,即我们可以使用以上这两个Boolean对象表示所有的布尔值。提供这两个静态变量相当于对Boolean对象的"缓存",是为了让开发者直接使用这两个变量而不是每次都创建新的Boolean对象,这样既节省内存又避免了创建一个新实例的时间开销。

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"));
}

两种构造方法,一种传入boolean值,一种传入一个字符串,传入字符会进行"to boolean"解析,即当传入的字符串忽略大小写等于"true"时判断为true,否则为false。
一般我们不推荐直接用构造函数来创建Boolean对象,使用全局变量TRUE 、FALSE 或是使用Boolean.valueOf方法即可,避免生成不必要的对象。

parseBoolean:

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

将字符串转换为boolean值,调用了toBoolean方法。只有当传入的字符串忽略大小写为"true"时返回true否则返回false。

booleanValue:

public boolean booleanValue() {
    return value;
}

返回本对象的布尔值。

valueOf:

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

valueOf方法用于返回对应的Boolean对象,这里可以看成从"缓存"中获取Boolean对象,因为布尔类型只有两种状态。

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;
}

先判断对象是否是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;
}

根据给定的名称查询系统中是否存在该属性,如果存在且为true则返回true,否则返回false。根据程序需要可以提前设置一些系统属性,使用System.getProperty(name)获取设置的系统属性。

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用于比较两个布尔值的大小true大于false,compareTo调用了compare方法。(x == y) ? 0 : (x ? 1 : -1)如果相等返回0,如果不等x为true则y为false返回1,否则返回-1。compareTo是实现的Comparable接口中的方法,该方法返回0表示本对象与传入的对象相等,返回正数表示本对象比传入的对象大,返回负数表示本对象比传入的对象小。

查看所有目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,622评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 最近马伊琍主演的《我的前半生》算是火了,小编的爸爸妈妈姐姐同事都在看!也难怪,马伊琍真是演技爆棚了,把剧中的人物子...
    戒咖啡cxj阅读 398评论 0 0
  • 站在出世俯视入世, 站在入世回首出世, 站在有常窥伺无常 站在无常领略有常 站那山巅俯视大地 天下的乌鸦一般黑 指...
    纵情嬉戏天地间阅读 183评论 9 2