Java中intern()方法定义的位置?

时间:2017-03-02 04:27:44

标签: java

intern()方法在哪里 - 用于从堆中放置字符串文字 - 定义?我只看到String类中的声明;不是定义。

1 个答案:

答案 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源并检查它们!祝你好运!