String intern () Verhalten

Von dem javaDocs der internen Methode der String-Klasse:

Wenn die Methode intern aufgerufen wird und der Pool bereits eine Zeichenfolge enthält, die diesem String-Objekt entspricht, wie durch die Methode equals (Object) bestimmt, wird die Zeichenfolge aus dem Pool zurückgegeben. Andernfalls wird dieses String-Objekt zum Pool hinzugefügt und ein Verweis auf dieses String-Objekt zurückgegeben.

Betrachten Sie die folgenden Anwendungsfälle:

    String first = "Hello";
    String second = "Hello";

    System.out.println(first == second);

    String third = new String("Hello");
    String fourth = new String("Hello");

    System.out.println(third == fourth);

    System.out.println(third == fourth.intern());
    System.out.println(third.intern() == fourth);
    System.out.println(third == fourth);

    System.out.println(third.intern() == fourth.intern());
    System.out.println(third.intern() == first);

    String fifth = new String(new char[]{'H','e','l', 'l', 'o'});
    String sixth = new String(new char[]{'H','e','l', 'l', 'o'});

    System.out.println(fifth == fifth.intern());
    System.out.println(sixth == sixth.intern());

    String seven = new String(new char[]{'H','e','l', 'l', 'o' , '2'});
    String eight = new String(new char[]{'H','e','l', 'l', 'o' , '2'});

    System.out.println(seven == seven.intern());
    System.out.println(eight == eight.intern());

Kann jemand erklären, warumseven == seven.intern() istwah während die folgenden sindfalsc:

System.out.println(fifth == fifth.intern());System.out.println(sixth == sixth.intern());System.out.println(eight == eight.intern());

Antworten auf die Frage(8)

Ihre Antwort auf die Frage