Javaでブールオブジェクトを文字列に変換する最善の方法


108

ブール値を文字列型に変換しようとしています...

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

または

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

上記のどれがより効率的ですか?


あなたが見てきましたソースコードこれらの2つの方法の?
QUITあり-匿名-ムース2013年

1
私は好む""+b。遅くなりますが、開発者にとっては効率的です。最高のパフォーマンスが必要な場合は、直接ByteBufferにデータを書き込んだり、ByteBufferからデータを書き込んだりすることができます。つまり、文字列で行う処理を変更して、不要になるようにします。
Peter Lawrey 2013

また、nullとして扱いたい場合はfalse、次を使用できますString.format("%b", b)
ZhekaKozlov

回答:


145

それらの間に大きなパフォーマンスの違いはないと思いますが、私は最初の方法を好みます。

あなたが持っている場合は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
テストスニペット用に1つ!
gaurav

28

あなたの価値が確かでないなら、nullあなたは3番目のオプションを使うことができます

String str3 = b.toString();

そしてそのコードは次のようになります

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

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が最初に引数として渡されるボックス Boolean開梱する必要があるため、少し遅くなります。booleanBoolean.toString(...)b.toString()private boolean valueBoolean


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

コードを正しくフォーマットし、説明を加えてください。
helloflash 2015年

3

これが「True」や「TRUE」ではなく、定数の「true」値を取得するためのものである場合、これを使用できます。

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

1

これを行う簡単な方法(デバッグなど)を探している場合は、空の文字列をブール値に連結するだけです。

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

ただし、本番環境では別の方法を使用することを強くお勧めします。これは、デバッグに役立つ簡単なクイックソリューションです。


本番環境での使用を推奨しない理由を詳しく説明していただけますか?いくつかのシナリオで失敗する可能性はありますか?
lazyvab

@lazyvab正直なところ、私にはわかりません!私はJavaをもう書いていませんが、聞いたことがあるに違いないと思います。私は過去数年間他の言語でプログラミングをしてきましたが、これを本番環境で使用すると害を及ぼす理由がわかりません。加えてSystem.out.println、とにかくデバッグするために右でありますか?
jskidd3

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

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

したがって、どちらの方法も同等に効率的です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.