web-dev-qa-db-ja.com

Javaで「print」の代わりに「printf」を使用する十分な理由はありますか?

私は学校で真剣な低レベルのプログラミングコースを受講する機会がありませんでした。 (私は本当に「舞台裏」をより良いプログラマーになるために学び続けるべきだと知っています。)System.out.printステートメントに何かを貼り付ける機能を含め、Javaの便利さを高く評価しています。ただし、代わりにSystem.out.printfを使用する理由はありますか?

また、「実際のアプリケーション」では、このような印刷呼び出しを回避する必要がありますか?おそらく、なんらかのUI関数を使用してクライアントのディスプレイにメッセージを印刷する方がよいでしょう。

19
tomato

PrintStream クラスの printf メソッドは、Cのprintf関数に似た 文字列フォーマット を提供します。

printfのフォーマットは Formatterクラスのフォーマット構文 を使用します。

printfメソッドは、複数の変数を1行で表示するときに特に役立ちます。これは、文字列の連結を使用すると面倒です。

int a = 10;
int b = 20;

// Tedious string concatenation.
System.out.println("a: " + a + " b: " + b);

// Output using string formatting.
System.out.printf("a: %d b: %d\n", a, b);

また、Javaアプリケーションを書くことは、必ずしもGUIアプリケーションを書くことを意味しないので、コンソールアプリケーションを書くときは、printprintlnprintfおよびSystem.outに出力されるその他の関数。

29
coobird

浮動小数点数の精度を制御したり、パディングを行ったりする必要がある場合は、より良い方法です。System.out.printは、あらゆる種類のものを出力できますが、精度とパディングをきめ細かく制御することはできません。

3
Antti Huima

通常、「実際の」アプリケーションでは、Java.util.LoggingやCommons Loggingなどのログシステムに書き込みます。これらのログには、さまざまなレベルの詳細度(つまり、本番環境では無効になる「デバッグ」モード)を記録する機能があります。 )。ただし、迅速でダーティな一時デバッグの場合、System.out.println()が最も簡単な方法です(ランタイム環境が標準出力を読み取り可能な場所にダンプする場合)。

また、いつでも「String.format()」を使用して、フォーマットと変数の引数リストを使用して文字列を作成できることにも触れておきます(その後、この文字列をロギングメソッドまたはSystem.out.printlnに渡します)。これは多くの場合、一連の変数を文字列に連結するよりも優れています。

3
Marc Novakowski

ほとんどの実際のプログラムの場合、ロギングが使用されます。デバッグメッセージは、ロギング構成を介してオン/オフにできます。例としてlog4jを参照してください。

2
Peter Lawrey