在java中将Boolean对象转换为字符串的最佳方法

Rac*_*hel 103 java boolean

我试图将布尔值转换为字符串类型...

Boolean b = true;
String str = String.valueOf(b);
Run Code Online (Sandbox Code Playgroud)

要么

Boolean b = true;
String str = Boolean.toString(b);
Run Code Online (Sandbox Code Playgroud)

以上哪一项会更有效率?

Roh*_*ain 141

我不认为它们之间会有任何明显的性能差异,但我更倾向于第一种方式.

如果您有Boolean参考,如果您的参考是,Boolean.toString(boolean)将抛出.因为引用在传递给方法之前是未装箱的.NullPointerExceptionnullboolean

虽然,String.valueOf()源代码显示的方法,显式null检查:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
Run Code Online (Sandbox Code Playgroud)

只需测试此代码:

Boolean b = null;

System.out.println(String.valueOf(b));    // Prints null
System.out.println(Boolean.toString(b));  // Throws NPE
Run Code Online (Sandbox Code Playgroud)

对于原始布尔值,没有区别.

  • 1 为测试片段! (2认同)

Psh*_*emo 28

如果您确定您的价值不是,null您可以使用第三个选项

String str3 = b.toString();
Run Code Online (Sandbox Code Playgroud)

它的代码看起来像

public String toString() {
    return value ? "true" : "false";
}
Run Code Online (Sandbox Code Playgroud)

如果你想使用null安全,请使用String.valueOf(b)哪个代码

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
Run Code Online (Sandbox Code Playgroud)

因此,您会看到它将首先测试null并稍后调用toString()您对象上的方法.


调用Boolean.toString(b)将调用

public static String toString(boolean b) {
    return b ? "true" : "false";
}
Run Code Online (Sandbox Code Playgroud)

这比b.toString()JVM需要首先将unbox 作为参数传递Booleanboolean它时慢一点Boolean.toString(...),同时b.toString()重用对象中保存其状态的private boolean value字段Boolean.