0

.equals()2 つの文字列をmethod と equalsで比較してみsign(==)ました。しかし、時々、両方が同じ答えを返します。これを解決するにはどうすればよいですか?

4

1 に答える 1

4

基本的に、interned 文字列について知っておくべきことが 2 つあります。

  • コンパイル時の定数からロードされた文字列はインターンされます。
  • メソッドを呼び出すと、文字列がインターンされますintern()

ただし、細かい点がいくつかあります。

  • コンパイル時の定数文字列の連結もコンパイル時の定数であるため、たとえば、の結果"foo"+"bar"は (インターンされた) 定数 String"foobar"です。
  • このメソッドは、それが返すcopyintern()をインターンします。元の文字列は「interned string pool」に追加されません。
  • インターンされた文字列はガベージ コレクションできません。実際には使用しない文字列をインターンすると、メモリ リークが発生します。
于 2013-06-21T19:13:13.473 に答える