在java中将Boolean对象转换为string的最佳方法
我试图将布尔转换为stringtypes…
Boolean b = true; String str = String.valueOf(b);
要么
Boolean b = true; String str = Boolean.toString(b);
哪一个更高效?
我不认为他们之间有任何显着的performance差异,但我更喜欢第一种方式。
如果你有一个Boolean
引用,如果你的引用是null
, Boolean.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很有用。