intern()方法在哪里 - 用于从堆中放置字符串文字 - 定义?我只看到String类中的声明;不是定义。
答案 0 :(得分: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
的实体,它保留对实习生字符串的引用,并且此方法委托给它。进一步的解释可能超出了问题的范围,但是如果你热衷的话,你可以下载JDK源并检查它们!祝你好运!