2013-01-02 11 views
6

は、私は、Javaチュートリアルを従っていましたし、それは私のような何かを持っていた。だから私は一緒に続く良いスポーツのようInteger.toString()を使用する理由は何ですか?

int k = 5; 
System.out.println("The number is " + Integer.toString(k)); 

を、私は助けることはできませんが、不思議は、なぜ全くそのメソッドを使うのか?

int k = 5; 
System.out.println("The number is " + k); 

非文字列データ型のtoString()方法を使用するには十分な理由があります:と同じ機能を得るために余分なタイピングがたくさんのように思えますか?そして、私の具体例では、自動toStringされないint値がありますか?

+6

2の間に有意差はありません。このチュートリアルでは、 'toString'が「カバーの下」と呼ばれていることを強調したかったかもしれませんが、日々のプログラミングではそれは単なる追加の混乱です。 –

+1

私はすでに以前の回答を掲載しましたが、実際のケースではInteger.toString(int)やその他のセーフガードを使用しなければならない場合があることを指摘したいと思いました。演算子。注意しないと、 '+'演算子との文字列連結は意図しない結果を生むことがあります。 – rob

答えて

15

です。以下の例を見てみましょう:

private static void printMessage(int k) { 
    System.out.println("number" + '=' + k); 
} 

出力:number=5

を今、あなたは最後の最初の番号とテキストを印刷するとします。私がやっているすべては、文字列連結の最初と最後のアイテムを交換されています

private static void printMessage2(int k) { 
    System.out.println(k + '=' + "number"); 
} 

出力:66number

おっと! =のint値が連結される代わりにkに追加されました。 1つの解決策は=Stringにすることです。別の解決策は、明示的にintStringに変換することです:

private static void printMessage2Safe(int k) { 
    System.out.println(Integer.toString(k) + '=' + "number"); 
} 

出力:5=number

「ああ、私はとにかく、ことを決してしないだろう」あなたが言います。 「正しい人なら、誰でも=をもう1つのStringの一部にしているはずです。」しかし、あなたが基本的な電卓アプリの一部を実装していて、その式とその結果を出力したいのであればどうでしょうか?あなたが実際に慎重にしようとしているなら、StringBuilder.append()を使って式の部分を連結すると思います。しかし、そうでない場合は、以下のdisplayメソッドの最初の実装を記述しないことを願っています。

public class Calculator { 

    public static void main(String[] args) { 
     display(2, '+', 3, 5); 
     displaySafe(2, '+', 3, 5); 
    } 

    public static void display(int num1, char operator, int num2, int result) { 
     System.out.println(num1 + operator + num2 + '=' + result); 
    } 

    public static void displaySafe(int num1, char operator, int num2, int result) { 
     System.out.println(Integer.toString(num1) + operator + Integer.toString(num2) + "=" + result); 
    } 

} 

出力:

114 
2+3=5 
+3

toStringを使用する理由の非常に良い例 – Mike

5

文字列以外のデータ型にtoString()メソッドを使用する理由はありますか?

一部の人々はそれがより明確であると信じています。彼らは基本的に同じことを実現するかもしれない初心者のためのESP。

注:APPEND(intは)それは文字列を作成する必要性を回避StringBuilderのに数海峡を変換し、この

// from AbstractStringBuilder 
public AbstractStringBuilder append(int i) { 
    if (i == Integer.MIN_VALUE) { 
     append("-2147483648"); 
     return this; 
    } 
    int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1 
           : Integer.stringSize(i); 
    int spaceNeeded = count + appendedLength; 
    ensureCapacityInternal(spaceNeeded); 
    Integer.getChars(i, spaceNeeded, value); 
    count = spaceNeeded; 
    return this; 
} 

のように見えるとしてのJava 7の更新9では、それは最初の文字列を作成しません。最初。

私の具体例では、auto toString'edでは使用できないint値がありますか?

いいえすべてのプリミティブ値はtoStringされています。

私が知っている唯一の例外は、signalling and quiet Not-A-Numberという値です。Javaはそのようなことを気にしません。共に「のNaN」として表示され、上記プリント

+0

しかし、これらの信号/ NaN値は 'float' /' double'のような浮動小数点プリミティブでのみ使用され、 'int'では使用されません。 – matts

0
System.out.println("The number is " + Integer.toString(k)); 

を(Javaでの又はほとんどの関数)のtoStringとの差()を指示する方法がない「の数が」ので、文字列であります文字列+(何か)です。文字列のみです。その場合はtoString()をすべて呼び出す必要はありません.k値だけを出力する場合は、toString()を呼び出す必要はありません。S.O.P internaqlly toString 。

最後に、IntegerをStringに変換しない限り、toString()メソッドを呼び出さないでください。

-6

数値を文字列データ型にすることができます。したがって、数値はすべて文字列です。モブは言ったように、それはあまりにも整数ではありません。あなたはそれが整数になる前に解析する必要があります。

+0

Integer.toString(int)は整数を期待しないので、Integerである必要はありません。 –

+0

そして、あなたがオウムの答えと同じように、これは間違っています。 –

+0

printlnは自動的にこの変換を実行しますが、それはできません – nobalG

0

2番目のバージョンを使用してください。

"The number is " + k; 

javacのような文字列の連結の表現について

new StringBuilder("The number is ")).append(Integer.toString(k)).toString()); 

ようにSystem.outとしてのStringBuilderを使用して実際のコードをビルドします。printlnのは、単に結果の文字列を出力し、完全なコードは、それはあなたが明快さを改善し、あなたやあなたのコードの将来のメンテナが導入する可能性の微妙なエラーを防止するために採用することができ、多くの「安全なプログラミング」の実践の一つだ

System.out.println((new StringBuilder("The number is ")).append(Integer.toString(k)).toString()); 
関連する問題