JVM系列之:String.intern和stringTable
简介 StringTable是什么?它和String.intern有什么关系呢?在字符串对象的创建过程中,StringTable有起到了什么作用呢? 一切的答案都在本文中,快来看看吧。 intern简介 intern是String类中的一个native方法,所以它底层是用c++来实现的。感兴趣的同学可以去查看下JVM的源码了解更多的内容。 这里我们主要谈一下intern的作用。 intern返回的是这个String所代表的对象,怎么理解呢? String class维护了一个私有的String pool, 这个String pool也叫StringTable,中文名字叫做字符串常量池。 当我们调用intern方法的时候,如果这个StringTable中已经包含了一个相同的String对象(根据equals(Object)方法来判断两个String对象是否相等),那么将会直接返回保存在这个StringTable中的String。 如果StringTable中没有相同的对象,那么这个String对象将会被加入StringTable,并返回这个String对象的引用。 所以,当且仅当 s.equals(t) 的时候s.intern() == t.intern()。 intern和字符串字面量常量 我们知道在类文件被编译成class文件时,每个class文件都有一个常量池