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