我正在尝试将布尔值转换为字符串类型...
Boolean b = true;
String str = String.valueOf(b);
或
Boolean b = true;
String str = Boolean.toString(b);
以上哪一项会更有效率?
答案 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 Boolean
到boolean
,它将作为参数传递给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";
}
所以这两种方法都同样有效。