2011-08-11 12 views

答えて

5

をあなたはその

System.out.println("Your answer is: " + answer); 

作品を発見しただろう! :)

+0

そしていくつか1つは私のためにdownvoted :) LOL –

+0

あなたは彼らが知っていた唯一の答えに答えた...笑 –

+0

何とかOPが答えたいと思う: –

1

が動作します。

answerがオブジェクトを指している(つまりプリミティブではない)場合、toString()メソッドが暗黙的に呼び出されることに注意してください。 プリミティブは文字列表現に変換されます。 プリミティブは、toString()が呼び出される対応するラッパークラス(下記の私のコメントを参照)によってラップされます。それでも、プリミティブの場合はラッパーが(プリミティブint i = 100の場合は100が出力される)をオーバーライドするので、それについては心配する必要はありません。

Stringの場合、文字列自体を返しますが、クラス名とメモリアドレスだけの任意のオブジェクトを返すオブジェクトです。

例:

Your answer is: [email protected] 

このようなtoString()オーバーライド:

class Answer { 
    private String text; 

    Answer(String t) { 
    text = t; 
    } 

    public String toString() { 
    return text; 
    } 
} 

が、その後につながるAnswertoString()をオーバーライドしない場合

mypackage.Answer answer = new mypackage.Answer("yes"); 
System.out.println("Your answer is: " + answer); 

これはちょうど、次を印刷可能性があります:

Your answer is: yes 
+1

それはあまりにもプリミティブでうまくいく... AutoBoxing :) – ngesh

+0

@ntc AFAIKの自動ボクシングは、例えば "+ 1"の数字には関係しません。その場合、+演算子は 'new Integer(1).toString()'を実行せずに1を文字列に変換するだけです。 – Thomas

+0

それから質問として私に聞かせてください...しかし、それまで私はあなたに同意する – ngesh

1

文字列を連結して出力​​するので、コードの最初の行は問題ありません。

しかし、2行目は有効ではありません(インデントされた結果が最初のものと同じ場合)、namelオブジェクトをパラメータとしてprintlnメソッドに渡しています。 String.formatのようなものを使用して、printfスタイルの文字列を使用することができます(私はそれを...と呼ぶことができます)。

例:あなたの例ではそう

String.format("Blah %d Blah", i) 

System.out.println(String.format("Your answer is: %s", answer)); 

は、このコードをテストした私の頭の上のそれを書いていないことがあります。

2
System.out.println("Your answer is: " + answer); 

あなたは

そのため答えオブジェクトtoString()方法で、それが可能である方法を求めている場合。println()は文字列を受け取り、最初に文字列を見ると、次の変数/ ObjectのメソッドtoString()を呼び出して文字列にします。値がintの場合は、AutoBoxingとなり、Integer()オブジェクトに変換され、toString()メソッドが呼び出されます。

関連する問題