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());