1

コードとその出力を正しく投げる人はいますか?

public class HelloWorld {
  public static void main(String[] args) {
    String s1 = "Hello World";
    String s6 = "Hello" + " World";
    String s7 = "Hello";
    String s8 = " World";
    String s9 = s7 + s8;
    String s10 = s7 + " World";
    System.out.println(s1==s6);
    System.out.println(s1==s9);
    System.out.println(s1==s10);
    System.out.println(s9==s10);
  }
}

出力:

true
false
false
false

s1文字列定数プールに作成されることがわかりました。連結演算子の使用により、s6、 、s9およびがどのように作成されるのか疑問に思っています。s10

4

4 に答える 4

6

コンパイル時に多くの最適化が行われます。したがって、コンパイル後に逆コンパイルされたコードを見ると、次のように表示されます。

    String s1 = "Hello World";
    String s6 = "Hello World";
    String s7 = "Hello";
    String s8 = " World";
    String s9 = (new StringBuilder(String.valueOf(s7))).append(s8).toString();
    String s10 = (new StringBuilder(String.valueOf(s7))).append(" World").toString();
    System.out.println(s1 == s6);
    System.out.println(s1 == s9);
    System.out.println(s1 == s10);
    System.out.println(s9 == s10);

と、わかりやすく説明してくれます。つまり、あなたのために多くの作業を行っているのは、舞台裏のコンパイラです。

文字列リテラルを連結すると、単一のリテラルに置き換えられます。変数との連結を使用すると、StringBuilder が使用されます。

于 2013-04-30T04:34:08.563 に答える
0

文字列は、演算子ではなく(or ) メソッドを使用して比較する必要があります。==compareTo()compareToIgnoreCase()

...
String str01 = "abc";
...
System.out.println(str01.compareTo("abc") == 0); // Will print 'true'
System.out.println(str01.compareTo("a" + "b" + "c") == 0); // Will also print 'true'
System.out.println(str01.compareTo("ABC") == 0); // Will print 'false'

「compareTo()」は、文字列が等しい場合はゼロになる整数を返し、それ以外の場合はゼロ以外の数値を返します。チェック: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#compareTo(java.lang.String)

于 2013-04-30T04:35:57.437 に答える
0

彼らは皆「Hello World」と言っています

s6 = 結合する 2 つの文字列 "Hello" と "World"。

連結の使用は、Java プログラミング言語で文字列を一緒に追加することです。これは、複数の行を作成し、テキストを複数の行に移動できるようにするためです。

例えば:

  System.out.println("I enjoy" + "This nice " + "weather!");

』をプロデュースします!

スペースがないのは、連結しても何もせず、「+」記号を無視し、「」をまとめて 1 つの大きな文または文字列を作成するためです。

s6 の場合、"Hello" と "World" の 2 つの文字列を追加するという意味で、最後は "Hello World" になります。

s9 の場合、文字列変数 s7 と s8 を取得し、それらを連結します。したがって、実行すると、Java は s7 を読み取り、「わかりました。s7 は文字列 "Hello" を保持し、s8 は文字列 " World" を保持します。これらを組み合わせて "Hello World" を作成します。

s10でも同じことです。s7 String を取り、その末尾に「World」を追加します。

お役に立てれば

于 2013-04-30T04:36:30.787 に答える