在java中将布尔对象转换为字符串的最佳方法
我正在尝试将布尔值转换为字符串类型在java中将布尔对象转换为字符串的最佳方法,java,boolean,Java,Boolean,我正在尝试将布尔值转换为字符串类型 Boolean b = true; String str = String.valueOf(b); 或 上面哪一个更有效 如果您确定您的值不是null,您可以使用第三个选项,即 String str3 = b.toString(); 它的代码看起来像 public String toString() { return value ? "true" : "false"; } public static String valueOf(Object o
Boolean b = true;
String str = String.valueOf(b);
或
上面哪一个更有效 如果您确定您的值不是
null
,您可以使用第三个选项,即
String str3 = b.toString();
它的代码看起来像
public String toString() {
return value ? "true" : "false";
}
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
如果希望为空安全,请使用
String.valueOf(b)
哪个代码看起来像
public String toString() {
return value ? "true" : "false";
}
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需要首先将Boolean
解装箱到Boolean
,然后作为参数传递给Boolean.toString(…)
,而b.toString()
重用保存其状态的布尔对象中的私有布尔值
字段。我认为它们之间不会有任何显著的性能差异,但我更喜欢第1种方法
如果您有一个Boolean
引用,Boolean.toString(Boolean)
将在引用为null
时抛出NullPointerException
。因为在传递给方法之前,引用被取消绑定到布尔值
而,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
对于基本布尔型,没有区别
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);
}
}
如果您正在寻找一种快速的方法来实现这一点,例如调试,您可以简单地将空字符串连接到布尔值:
System.out.println(b+"");
但是,我强烈建议在生产中使用另一种方法。这是一个简单快速的解决方案,对调试非常有用。如果这是为了获得一个恒定的“真”值,而不是“真”或“真”,您可以使用以下方法:
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
如果您看到这两种方法的实现,它们看起来是一样的
String.valueOf(b)
Boolean.toString(b)
所以这两种方法都同样有效。你看过这两种方法的源代码了吗?我更喜欢“”+b
。对于开发人员来说,速度较慢但效率更高。如果希望获得最佳性能,可以将数据写入直接字节缓冲区或从直接字节缓冲区写入数据,即更改对字符串的处理方式,使其不需要。此外,如果希望将null
视为false
,可以使用String.format(“%b”,b)
尝试正确格式化代码,并给出一些解释。你能详细说明一下为什么不建议在生产中使用吗?在某些情况下它会失败吗?@lazyvab老实说,我不知道!我不再写Java了,但我只能推测这是我一定听说过的东西。在过去的几年里,我一直在用其他语言编程,但不明白为什么在生产中使用这种语言会带来伤害。另外,System.out.println
用于调试,对吗?1用于测试代码段!
public static String valueOf(boolean b) {
return b ? "true" : "false";
}
public static String toString(boolean b) {
return b ? "true" : "false";
}