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

2022-08-31 09:06:43

我正在尝试将布尔值转换为字符串类型...

Boolean b = true;
String str = String.valueOf(b);

Boolean b = true;
String str = Boolean.toString(b);

以上哪一个会更有效率?


答案 1

我不认为它们之间会有任何显着的性能差异,但我更喜欢第一种方式。

如果您有引用,则将抛出(如果引用是 )。因为引用在传递给方法之前已取消装箱。BooleanBoolean.toString(boolean)NullPointerExceptionnullboolean

而,源代码所示的方法会执行显式检查:String.valueOf()null

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

只需测试此代码:

Boolean b = null;

System.out.println(String.valueOf(b));    // Prints null
System.out.println(Boolean.toString(b));  // Throws NPE

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


答案 2

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

String str3 = b.toString();

它的代码看起来像

public String toString() {
    return value ? "true" : "false";
}

如果你想是空安全的,请使用哪些代码看起来像String.valueOf(b)

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

因此,如您所见,它将首先测试并在您的对象上调用方法。nulltoString()


调用将调用Boolean.toString(b)

public static String toString(boolean b) {
    return b ? "true" : "false";
}

这比JVM需要首先解箱要慢一点,这将作为参数传递给,同时重用持有其状态的对象中的字段。b.toString()BooleanbooleanBoolean.toString(...)b.toString()private boolean valueBoolean