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

时间:2013-09-16 16:35:49

标签: java boolean

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

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

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

以上哪一项会更有效率?

7 个答案:

答案 0 :(得分:140)

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

如果您有Boolean引用,Boolean.toString(boolean)如果您的引用为NullPointerException则会null。由于引用在传递给方法之前已被取消装箱到boolean

虽然源代码显示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

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

答案 1 :(得分:26)

如果您确定您的值不是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();
}

因为您看到它将首先测试null,然后在您的对象上调用toString()方法。


调用Boolean.toString(b)将调用

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

b.toString()慢一点,因为JVM首先需要 unbox Booleanboolean,它将作为参数传递给Boolean.toString(...)b.toString()private boolean value对象中重用Boolean字段,而该对象保持其状态。

答案 2 :(得分:3)

public class Sandbox {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Boolean b = true;
        boolean z = false;
        echo (b);
        echo (z);
        echo ("Value of b= " + b +"\nValue of z= " + z);
    }

    public static void echo(Object obj){
        System.out.println(obj);
    } 

}
Result
--------------
true
false
Value of b= true
Value of z= false
--------------

答案 3 :(得分:3)

如果这是为了获得一个恒定的“true”值,而不是“True”或“TRUE”,你可以使用它:

Boolean.TRUE.toString();
Boolean.FALSE.toString();

答案 4 :(得分:1)

如果您正在寻找快速方法来执行此操作,例如调试,则可以简单地将空字符串连接到布尔值:

System.out.println(b+"");

但是,我强烈建议您使用其他方法进行生产。这是一个简单的快速解决方案,可用于调试。

答案 5 :(得分:1)

取决于你的意思"高效"。性能方面两个版本与相同的字节码相同。

$ ./javap.exe -c java.lang.String | grep -A 10 "valueOf(boolean)"
  public static java.lang.String valueOf(boolean);
    Code:
       0: iload_0
       1: ifeq          9
       4: ldc           #14                 // String true
       6: goto          11
       9: ldc           #10                 // String false
      11: areturn


$ ./javap.exe -c java.lang.Boolean | grep -A 10 "toString(boolean)"
  public static java.lang.String toString(boolean);
    Code:
       0: iload_0
       1: ifeq          9
       4: ldc           #3                  // String true
       6: goto          11
       9: ldc           #2                  // String false
      11: areturn

答案 6 :(得分:0)

如果您看到两种方法的实现,它们看起来都是一样的。

String.valueOf(b)

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

Boolean.toString(b)

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

所以这两种方法都同样有效。