JAVA字符串布尔类型_java封装数据类型——Boolean

本文详细介绍了JAVA中Boolean封装类型,包括其定义、属性、构造方法、普通方法,如compare、hashCode、equals等。Boolean实现了Comparable接口,允许比较大小,规定true大于false。此外,建议使用valueOf方法创建Boolean对象以节省资源。
摘要由CSDN通过智能技术生成

众所周知,java对常见的原始数据类型都提供了对应的封装类型,增加一些常用的特性(如 计算hash值、比较相等、类型转换等),以扩展他们对数据处理的能力,使得他们更好地适应面向对象编程的各种场景。今天,我们首先来学习 boolean 布尔型对应的封装类型。

1. 定义

首先来看看定义(下图),可以看到,Boolean 实现了序列化和比较接口,说明一个 Boolean 对象是可以序列化的;是可以比较大小的;另外,注意 final 修饰符,Boolean 不可被继承。

51c94213ce065ba00e8247d045477866.png

2. 属性

下图是 Boolean 类型的重要属性字段:

e4ef270e0cf2ca9c01a4afff545ab7bd.png

2.1. 枚举静态引用

我们知道,原始 boolean 类型只存在两个值:true 和 false。既然只有两种值,那么封装类就干脆定义两个静态的引用,分别保持对两个值对象实例的引用,它们会在类加载的时候被初始化。

2.2. 值

注意 value 字段的 final 修饰符,说明一个 Boolean 类型对象的值是不允许改变的。

2.3. 类型引用

我们知道,虚拟机在类加载的时候,会为每个类创建一个 Class 对象,用于在运行时表示这个类的类型信息(比如:类名、全类名、有哪些修饰符、有哪些方法和属性、有哪些注解等),那么原始数据类型也不例外,上图 TYPE 就是保持对这个 Class 对象的引用。

3. 构造方法

Boolean 有两个构造方法,分别接收原始数据类型 boolean 值和字符串 “true”或者“false”(忽略大小写)如果传的字符串为 null,那么自动认为该对象值为 false。

2475b3f44fc6c5a3f2c3603734c83245.png

上图中红框中注释说明了,不建议使用构造方法,而建议使用静态工厂 valueOf(boolean) 方法,下面是 valueOf 方法代码。可以看出,静态工厂方法会直接返回类属性 TRUE 或 FALSE 引用的静态对象实例,他们在类加载的时候已经实例化。这样就不需要再分配内存空间了,节省了时间和空间。

e100400cfa7289f95176bdd6ad7838ed.png

4. 普通方法

boolean

将此 Boolean对象的值作为布尔原始值返回。

static int

compare(boolean x, boolean y)

比较两个 boolean值。

int

将此 Boolean实例与另一个实例进行比较。

boolean

返回 true当且仅当参数不是 null ,并且是一个 Boolean对象,表示与此对象相同的 boolean值。

static boolean

返回 true当且仅当由参数命名的系统属性存在且等于字符串 "true" 。

int

返回此 Boolean对象的哈希码。

static int

hashCode(boolean value)

返回一个boolean值的哈希码; 兼容Boolean.hashCode() 。

static boolean

logicalAnd(boolean a, boolean b)

返回将逻辑AND运算符应用于指定的 boolean操作数的结果。

static boolean

logicalOr(boolean a, boolean b)

返回将逻辑OR运算符应用于指定的 boolean操作数的结果。

static boolean

logicalXor(boolean a, boolean b)

返回将逻辑XOR运算符应用于指定的 boolean操作数的结果。

static boolean

返回一个 String此布尔值的 String对象。

static String

toString(boolean b)

返回一个 String指定布尔值的 String对象。

valueOf(boolean b)

返回一个 Boolean指定的 boolean值的 Boolean实例。

返回一个 Boolean ,其值由指定的字符串表示。

4.1. compare 和 compareTo

前面定义中我们已知,Boolean 对象是可以比较大小的(这个有些意外,平时开发中好像从来没有对布尔类型做过大小比较),那么到底是怎么一个比较规则呢?下面先看一下比较大代码:

public intcompareTo(Boolean b) {return compare(this.value, b.value);

}public static intcompare(boolean x, boolean y) {return (x == y) ? 0 : (x ? 1 : -1);

}

可以看出:对于 compareTo(Boolean b) 方法,当当前对象和参数b指定对象同为 true 或者同为 false 时,返回0;否则当当前对象值为 true 时返回 1;否则返回 -1。根据 comparable 接口的常规约定:@return  a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. 我们可以看出,java在对布尔值比较大小时认为 true > false(姑且可以这么解释以方便记忆 compareTo 方法的规则,现实中真假应该是没有大小之说的吧)

4.2. getBoolean

该方法尝试获取一个由参数指定的名称的布尔类型的系统属性值(详细的可以去了解 System 类),如果该属性不存在或者不是布尔类型(所谓布尔类型,就是忽略大小写的 “true” 或者 “false” 字符串),都会返回 false;否则返回该系统属性的布尔值。代码:

* If there is no property with the specified name, or ifthe specified* name is empty or null, then [email protected] false} isreturned.*

*@param name the system property name.*@return the [email protected] boolean} value of the system property.* @throws SecurityException for the same reasons as

*[email protected] System#getProperty(String) System.getProperty}*@see java.lang.System#getProperty(java.lang.String)*@see java.lang.System#getProperty(java.lang.String, java.lang.String)*/

public staticboolean getBoolean(String name) {

boolean result= false;try{

result=parseBoolean(System.getProperty(name));

}catch (IllegalArgumentException |NullPointerException e) {

}returnresult;

}

4.3. hashCode 方法

hashCode 是顶级类 Object 定义的基础方法之一,Boolean 对该方法进行了重写。该方法只可能返回 1231 和 1237 两个值。既然布尔只有两种值,那么 hashCode 也只有两个值,理所当然,顺理成章。(如果想问为什么偏偏是这两个数的朋友们就去了解一下 hashCode 方法设计的初衷和哈希表吧)

/**

* Returns a hash code for this [email protected] Boolean} object.

*

* @return the integer [email protected] 1231} if this object represents

* [email protected] true}; returns the integer [email protected] 1237} if this

* object represents [email protected] false}.*/@Overridepublic inthashCode() {returnBoolean.hashCode(value);

}/**

* Returns a hash code for a [email protected] boolean} value; compatible with

* [email protected] Boolean.hashCode()}.

*

* @param value the value to hash

* @return a hash code value for a [email protected] boolean} value.

* @since 1.8*/

public static inthashCode(boolean value) {return value ? 1231 : 1237;

}

4.4. equals 方法

Boolean 类也重写了 equals 方法,当且仅当参数指定的对象也是 Boolean 实例且与当前对象真假值相同时返回 true。

publicboolean equals(Object obj) {if(obj instanceof Boolean) {return value ==((Boolean)obj).booleanValue();

}return false;

}

很显然,Boolean 对象遵循 hashCode 和 equals 方法的常规约定。

5. 划重点

5.1. Boolean 是最终类,不可被继承;

5.2. 构造 Boolean 对象,建议使用静态工厂方法 valueOf ,而不是构造方法(因为 valueOf 使用静态缓存),这样比较节省时间和空间;

5.3. Boolean 实现了 comparable 接口,可以比较大小,java 默认为 true> false;

5.4. Boolean 的 hashCode() 方法返回 1231(true 时)或 1237(false 时),且与 equals 方法遵循常规约定;

原文:https://www.cnblogs.com/coding-one/p/11384773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值