首页 > 其他分享 >Boolean.getBoolean(String name) 和Boolean.parseBoolean(String s)的区别

Boolean.getBoolean(String name) 和Boolean.parseBoolean(String s)的区别

时间:2023-01-12 11:07:42浏览次数:34  
标签:getBoolean String name boolean toBoolean Boolean


最近在使用Boolean. 场景是String 的true,或者false转换成boolean 基本类型的布尔型。 随意的选了一个getBoolen 但是在做单元测试的时候验证不通过。

仔细看了下Boolean的源码才发现问题所在

Boolean 返回boolean的公有方法总共有两个,就是标题上所提到的Boolean.getBoolean(String name) 和 Boolean.parseBoolean(String s) 两个方法。

他们会都会调用 toBoolean的私有静态方法,不同点是在于Boolean.getBoolean是根据传参去找Java System的参数变量,如果系统中存在此变量则返回对应的boolean,否则返回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;
}

Boolean.parseBoolean:

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

toBoolean:

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

在看Boolean的时候发现一些开发细节开始比较好的,比如我们尽量少用 new Boolean(boolean value) 或者 new Boolean(String s)方式声明变量 ,这样在内存上和速度上都是不值当,除非必须要实例化新对象。我们尽量使用 静态工厂模式 valueof(boolean) 来做获取更好的内存使用和速度上。

再一点就是Boolean的自动装箱autoboxing 和 拆箱操作unboxing的使用,引用下oracle官网对关于autoboxing和unboxing的总结:

Autoboxing and unboxing lets developers write cleaner code, making it easier to read. The following table lists the primitive types and their corresponding wrapper classes, which are used by the Java compiler for autoboxing and unboxing:

Primitive type

Wrapper class

boolean

Boolean

byte

Byte

char

Character

float

Float

int

Integer

long

Long

short

Short

double

Double


标签:getBoolean,String,name,boolean,toBoolean,Boolean
From: https://blog.51cto.com/u_15939105/6003844

相关文章