2

Javaの人々への私の質問は、2つの文字列を比較しているときです

imageName=new String[20];    
....    
imageName[1]="img1";  
imageName[2]="img1";  

if(imageName[1]==imageName[2])  
{  
 ////  codes  
}

完全に機能しますが、数値の連結によって文字列を作成しているときは機能しません

imageName=new String[20];  
int j=1,k=1;  
imageName[1]="img"+j;  
imageName[2]="img"+k;

 if(imageName[1].toString()==imageName[2].toString())     
        {  
           ////  codes  
        }  

jとkの値は同じですが、機能していません

あなたの解決策を事前に感謝します

4

7 に答える 7

7

2つの文字列を比較するときは、 String.equalsを使用する必要があります。

if (imageName[1].equals(imageName[2])
于 2012-08-13T14:49:09.933 に答える
1

2つの文字列がまったく同じオブジェクトであるかどうかを比較しています。

あなたが意図したのは、それらの内容を比較することでした。代わりに使用することをお勧めします.equals

于 2012-08-13T14:49:35.733 に答える
1

Javaで文字列を比較するために「==」を使用することは決してありません。メソッドを使用しequals()ます。オペレーターは、==2つのString変数がメモリー内の同じ場所を参照しているequals()かどうかを確認し、メソッドは、2つの別々のStringオブジェクトに同じ文字が含まれているかどうかを確認します。ここで意味があるのは、この2番目の定義です。文字列の連結によって個別の文字列オブジェクトが作成されますが、それでもそれらを「等しい」と見なしたいと思います。

于 2012-08-13T14:50:29.327 に答える
1

The correct way to compare strings is using equals() method

したがって、以下のようにコードを変更してください。

if (imageName[1].equals(imageName[2])

そして、このような質問はこれまで何度も答えられてきたので、投稿する前にSOで調査することを検討してください。

于 2012-08-13T14:53:29.573 に答える
1

文字列を。と比較するのではなく、次のメソッド==を使用する必要があります。.equalsimageName[1].equals(imageName[2])

==ポインタが等しいtrueかどうかを比較するため、両方の変数がメモリ内のまったく同じインスタンスを表す場合になります。最初のケースでは、Javaがパフォーマンスのために文字列リテラルをプールするためです。ただし、2番目のケースでは、ヒープに割り当てられた2つの異なるオブジェクトが取得されます。これらのオブジェクトは、内容は同じですが、それでも2つの異なるオブジェクトです。

于 2012-08-13T14:49:23.127 に答える
0

2つを比較するには、方法 Stringを使用する方がよいequals()

 if(imageName[1].equals(imageName[2]))
{
//// codes
}

于 2012-08-13T14:50:20.027 に答える
0

==参照比較です。つまり、2つのオブジェクトが実際に同じオブジェクトであるかどうかを判断していることになります。次に使用する場合equals()、そのメソッドは文字列の内容を解析します。つまり、それらのオブジェクトは同じ内容を持っていますか(ここで微妙な違いがあることを理解できます)

最初のシナリオは、コンパイラが同じ文字列を2回持っていることを理解するのに十分賢いので機能します。つまり、次のようになります。

imageName[1]="img1";  
imageName[2]="img1"; 

配列要素が同じオブジェクトを指すことができると判断します。2番目のシナリオでは、それはもはや真実ではありません。

imageName[1]="img"+j;  
imageName[2]="img"+k;

コンパイラは、これらが同じ文字列オブジェクトである可能性があることを確実に判断できません(まったく正しく)。

したがって、(一般的に言えば)equals()を使用して比較する必要がありますStrings。参照の同等性を使用できます(文字列の内容ではなく参照を分解するため高速です)が、何をしているのかを完全に確認する必要があります(おそらく、使用しているのですString.intern()が、そこには欠点があります)

于 2012-08-13T14:52:10.527 に答える