0
class test
{
public static void main(String[] args)
 {
  String s1 = new String("JAVA");
  String s2 = new String("JAVA");
  String s3 = new String("JAVA");
 }
}

ここで作成される文字列オブジェクトの数とその理由は??

4

4 に答える 4

2

3 つの異なる String オブジェクトが宣言され、「JAVA」に初期化されます。

呼び出すたびにnew String()、新しい不変の String オブジェクトが作成されます。

于 2013-02-23T16:02:02.650 に答える
1

各オブジェクトのハッシュコードをどのように出力するかはわかりませんが、次のことを試して、何が得られるかを確認してください。各オブジェクトは同じ値の文字列ですが、メモリ内の異なる場所に格納されるため、Stringオブジェクトごとに異なるハッシュコードを使用する必要があります。

class test{
    public static void main(String[] args)
    {
        String s1 = new String("JAVA");
        String s2 = new String("JAVA");
        String s3 = new String("JAVA");

        System.out.println(System.identityHashCode(s1));
        System.out.println(System.identityHashCode(s2));
        System.out.println(System.identityHashCode(s3));
    }
}

次のような結果が返されるはずです。

219604438
1514883920
87924608

それが私のシステムに戻った方法です。それはあなたによって異なります。

于 2013-02-23T16:14:33.707 に答える
0

それぞれ同じ値を持っていますが、3 つの異なる文字列オブジェクトが作成されています。newオペレーターは、オブジェクトの新しいインスタンスを作成します。メモリの観点から考えると、次のようになります (左側の数字がメモリ内の場所であると仮定します)。

String s1: 01
01 J
02 A
03 V
04 A

String s2: 06
06 J
07 A
08 V
09 A

String s3: 11
11 J
12 A
13 V
14 A

したがって、各文字列はメモリ内に独自の場所を持ちますが、同じ値を含めることができます。

于 2013-02-23T16:05:36.450 に答える
0

String の 3 つの異なるインスタンスが作成されます。「new」キーワードは常に新しいオブジェクトを作成します。それらは同じ値を保持していますが、異なるメモリアドレスに割り当てられています:)

于 2013-02-23T16:11:46.377 に答える