2017-03-02 69 views
0

intern()方法 - 用於從堆中放置字符串文字 - 定義在哪裏?我只看到了String類中的聲明;而不是定義。Java中intern()方法定義的位置?

+0

請參閱[Java中的native關鍵字是什麼?](http://stackoverflow.com/questions/6101311/what-is-the-native-keyword-in-java-for)。 – MikaelF

+0

謝謝MikaeIF和喬! – user3103957

回答

2

實習生方法的定義這樣說:

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源代碼並檢查它們!祝你好運!