2017-03-02 138 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源代码并检查它们!祝你好运!