0
String s="hel"+"lo"

if(s == "hello")
 {
    //print true 

}
else
{
 //print false 
}

Sun jvm = true Ibm jvm = false

この不一致はなぜですか?

4

5 に答える 5

2

==文字列が構築後にインターンされた場合にのみ成功します。重要なポイントは、コンパイル時にjavacが最適化する+かどうか、つまりJVMが

String s = "hello"

また

String s = "hell" + "lo".

(ちなみに、これはコピー ペースト エラーに違いありません。連結された値には 3 つの l があります)

于 2013-05-23T12:18:21.767 に答える
1

Java 7 と 6 は、インターンされた文字列で異なる動作をすることを指摘します。この回答を参照してください。

Sun Java 7 を使用している場合、IBM jvm がまだ Java 6 として動作している可能性があります。

于 2013-05-23T12:32:08.237 に答える
0

あなたの質問には答えていませんが、文字列に対して == を実行することは、そもそもあなたが望んでいたことではない可能性が最も高いです。

    if(s.equals("hello")) {

あなたが本当にやりたかったことかもしれません...

編集:「==」は参照を比較するため、新しい文字列の作成方法の実装に応じて、両方の jvm が同時に結果を正しく表示する可能性があります! 「==」は、Java で文字列の等価性をチェックするための有効な演算子ではありません。

于 2013-05-23T12:15:41.820 に答える