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

问题描述 投票:0回答:7

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

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

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

以上哪一项效率更高?

java boolean
7个回答
171
投票

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

如果您有

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

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


32
投票

如果您确定您的值不是

null
,您可以使用第三个选项,即

String str3 = b.toString();

它的代码看起来像

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

否则,请在拨打此电话之前先检查一下

null

或者,如果您想获取文字字符串“null”(如果它是
null
)而不是事先自己检查
null
,请使用
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
字段,其中保持其状态。


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

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

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

3
投票

取决于你所说的“高效”是什么意思。从性能角度来看,两个版本都相同,因为其字节码相同。

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

2
投票

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

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

但是,我强烈建议使用另一种方法进行生产使用。这是一个简单快速的解决方案,对于调试很有用。


2
投票

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

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";
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.