Sie können nicht aus Java-Code auf den String-Pool zugreifen, zumindest nicht in der HotSpot-Implementierung von Java VM.
String-Pool in Java wird mit string interning implementiert. Nach JLS §3.10.5:
Zeichenkettenliteral bezieht sich immer auf die gleiche Instanz der Klasse String
. Dies liegt daran, dass String-Literale - oder allgemeiner gesagt, Strings, die die Werte von konstanten Ausdrücken (§15.28) sind - "interniert" sind, um eindeutige Instanzen zu teilen, wobei die Methode String.intern
verwendet wird.
Und nach JLS §15.28:
Compile-Zeitkonstante Ausdrücke vom Typ ist String
immer „interniert“, um eindeutige Instanzen zu teilen, wobei das Verfahren String.intern
verwenden.
String.intern
ist eine native Methode, wie wir in its declaration in OpenJDK sehen:
public native String intern();
The native code for this method Anrufe JVM_InternString
Funktion.
JVM_ENTRY(jstring, JVM_InternString(JNIEnv *env, jstring str))
JVMWrapper("JVM_InternString");
JvmtiVMObjectAllocEventCollector oam;
if (str == NULL) return NULL;
oop string = JNIHandles::resolve_non_null(str);
oop result = StringTable::intern(string, CHECK_NULL);
return (jstring) JNIHandles::make_local(env, result);
JVM_END
Das heißt, String interning mit nativen Code implementiert, und es gibt keinen Java-API direkt den String-Pool zugreifen. Sie können jedoch zu diesem Zweck eine native Methode selbst schreiben.
Zu welchem Zweck? Wie wird es den Ablauf Ihres Programms beeinflussen? – EJP
Beim Lernen des String-Pooling-Konzepts habe ich in Tutorials Beispiele gefunden, die besagen, dass diese Zeichenfolge im String-Pool gespeichert wird und diese nicht. Also dachte ich, wenn dieses Konzept durch das Drucken vorhandener Strings im Pool verdeutlicht werden könnte. Ich benötige es in keinem Auftrag. –
Mögliches Duplikat: http://stackoverflow.com/questions/19049812/can-we-access-or-query-the-java-string-intern-constant-pool –