2017-03-14 4 views
0

返される値を収集する文字列変数なしで "toString"メソッドを呼び出すとどうなりますか? 例:ここでは疲れた2つのコードスニペットを示します。最初のものは正しい答えを出し、2番目のものは間違った答えを与えますが、それでもコンパイルします。 "toString"メソッドが値を返すためのものであれば、2番目のコードブロックに対してコンパイラエラーが発生しませんか?文字列バッファメソッド "toString"

StringBuffer sb=new StringBuffer(s); //s is a string input taken from user 
     sb.reverse(); 
     String rev=sb.toString(); 
     if(s.equals(rev)){ 
      System.out.println("yes"); 
/*second try*/ 
StringBuffer sb=new StringBuffer(s); 
     sb.reverse(); 
     sb.toString();//what is happening here? 
     if(s.equals(sb)){ 
      System.out.println("yes"); 
+3

Javaは戻り値を取得するかどうかは気にしません。メソッドを実行しただけで、結果は何もしません。 – mike

+0

'StringBuffer'は' String'と決して等しくありません。あなたはDocsを読んで、 'equals'がどのように指定されているかを学んでください。 – ControlAltDel

+1

' if(s.equals(sb)){'あなたは' String'と 'StringBuffer'を比較できません。私はあなたができることを意味しますが、それはリンゴとオレンジを比較するようなものです。他の人が指摘しているように、Javaは戻り値を取得するかどうかは気にしません。私はあなたが今理解してくれることを願っています – rafid059

答えて

0

sb.toString(); //ここで何が起こっていますか?

あなたは良いですStringStringBuilderオブジェクトに変換されていますが、String型に戻り値を格納し、後であなたのequals呼び出しでそれを使用していません。あなたはそれを次のように実行する必要があります。

String reversedString = sb.toString(); 
if(s.equals(reversedString)){ 

それとも単に

if(s.equals(sb.toString())){ 

を今、あなたはStringクラスのequalsメソッドを使用してsbsを比較しています。引数として渡されたオブジェクトがStringクラスのインスタンスでない場合、このメソッドはfalseを返します。 StringBuilderオブジェクトsbStringのインスタンスではないので、equalsメソッドはfalseを返します。

0

toStringは、オブジェクトのtoStringメソッドが返すものを返します。 System.out.println(sb.toString)を試してください。それが何を返しているかを見る。

+0

それは単純に反転した文字列を印刷しました.. – Nan

+0

それはあなたが欲しいものではありません@Nan? –

1

わかりやすいです。

最初のケースでは、値が返され、後でその値を使用できるように変数が参照しています。

の場合、値は以前と同じように返されますが、変数によって参照されていません。したがって、この値は単に無駄になり、後で使用または操作することはできません。

0

StringBuffer#toString()は、返された値を変数に代入しないと、nothingsが発生し、要求した情報がなくなります。

0

.toString()は、文字列を返すメソッドであり、そのStringBufferを文字列に変換しません。

if(s.equals(sb.toString()))は、sと値をsbの値と比較しているため、変数に値を割り当てていなくても動作します。

0

Javaでは、戻り値を確認または保存する必要はありません。 sb.toString()が実行され、戻り値が切り捨てられます。

このメソッドは、副作用がある可能性があるため、実行する必要があることに注意してください。テストするには、クラスに実装することができます:

@Override 
public String toString() { 
    System.out.println("toStringTest"); 
    return super.toString(); 
} 

「toStringTest」が出ます!

関連する問題