1

次のコードでなぜだろうと思います:

   String args0 = args[0];
   String args1 = args[1];
   args0.intern();
   args1.intern();

   if (args0==args1){
      System.out.println("Success");
   } else {
      System.out.println("Failure");
   }

行コマンドの引数として 2 つの同一の文字列を渡すと、返されfailureます。

前もって感謝します。

4

6 に答える 6

4

不変であるため、比較が返されるように、変数がインターンされたインスタンスを参照するようにするにはString、インスタンスの戻り値を割り当てる必要があります。intern()==true

String args0 = args[0];
String args1 = args[1];
args0 = args0.intern();
args1 = args1.intern();

if (args0==args1){
   System.out.println("Success");
} else {
   System.out.println("Failure");
}

あなたの例args0args1は、まだ配列内の元の個別のインスタンスを参照しています。

于 2013-07-08T14:13:12.513 に答える
1

あなたがしなければなりません:

if (args0.intern() == args1.intern()){
    System.out.println("Success");
}
于 2013-07-08T14:12:54.193 に答える
0

文字列は不変です。

.intern()インターンプールにある (潜在的に)異なるString インスタンスを返します。

あなたはこのインスタンスを捨てています。

于 2013-07-08T14:12:31.100 に答える
0

Java は String リテラルを自動的にインターンします。これは、多くの場合、== 演算子が int やその他のプリミティブ値と同じように文字列に対して機能するように見えることを意味します。

文字列リテラルのインターンは自動的に行われるため、intern()メソッドは で構築された文字列で使用されnew String()ます。

この例も参照できます。

public class Test
{
   public static void main(String args[]){
      String Str1 = new String("Welcome to Tutorialspoint.com");
      String Str2 = new String("WELCOME TO SUTORIALSPOINT.COM");

      System.out.print("Canonical representation:" );
      System.out.println(Str1.intern());

      System.out.print("Canonical representation:" );
      System.out.println(Str2.intern());
   }
}
于 2013-07-08T14:13:20.690 に答える