0
intern()方法 - 用於從堆中放置字符串文字 - 定義在哪裏?我只看到了String類中的聲明;而不是定義。Java中intern()方法定義的位置?
intern()方法 - 用於從堆中放置字符串文字 - 定義在哪裏?我只看到了String類中的聲明;而不是定義。Java中intern()方法定義的位置?
實習生方法的定義這樣說:
public native String intern();
和native
位意味着它是一個本地方法,勾搭成在運行時的JVM。原來的代碼編寫是C++,你可以在這裏找到源周圍行3866:
http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/tip/src/share/vm/prims/jvm.cpp
它說:
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
,顯然瞭解它,你就必須開始通過JVM內部進行挖掘。簡而言之,在本土世界中有一個實體叫StringTable
,它保持對intern'ed字符串的引用,並且這個方法委託給它。進一步的解釋可能超出了這個問題的範圍,但是如果您熱衷的話,您可以下載JDK源代碼並檢查它們!祝你好運!
請參閱[Java中的native關鍵字是什麼?](http://stackoverflow.com/questions/6101311/what-is-the-native-keyword-in-java-for)。 – MikaelF
謝謝MikaeIF和喬! – user3103957