在java中将Boolean对象转换为string的最佳方法

我试图将布尔转换为stringtypes…

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

要么

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

哪一个更高效?

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

如果你有一个Boolean引用,如果你的引用是nullBoolean.toString(boolean)将抛出NullPointerException 。 由于引用在传递给方法之前被解除boolean

而作为源代码的String.valueOf()方法显示,显式为null检查:

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

只要testing这个代码:

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

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

如果你确定你的值不为null你可以使用第三个选项

 String str3 = b.toString(); 

和它的代码看起来像

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

如果你想成为null-safe使用String.valueOf(b)哪个代码看起来像

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

所以你看到它将首先testingnull ,然后调用对象的toString()方法。


调用Boolean.toString(b)将会调用

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

这比b.toString()慢一点,因为JVM需要首先取消 Boolean boolean ,它将作为parameter passing给Boolean.toString(...) ,而b.toString()重用Boolean对象中的private boolean value字段保持其状态。

 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 -------------- 

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

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

取决于“高效”的含义。 性能方面,两个版本都与其相同的字节码相同。

 $ ./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 

如果你正在寻找一个快速的方法来做到这一点,例如debugging,你可以简单地将一个空string连接到布尔值:

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

不过,我强烈build议使用另一种生产用法。 这是一个简单的快速解决scheme,对于debugging很有用。