java字符串池存在于那里_java – 如何检查字符串池内容?

本文探讨了Java中字符串池的原理,指出Java代码无法直接访问,但可通过String.intern()方法间接操作。重点介绍了HotSpot实现中的字符串常量表达式优化,以及如何通过本地方法间接触及字符串池。
摘要由CSDN通过智能技术生成

您无法从Java代码访问字符串池,至少不能在Java VM的HotSpot实现中。

a string literal always refers to the same instance of class String. This is because string literals – or, more generally, strings that are the values of constant expressions (§15.28) – are “interned” so as to share unique instances, using the method String.intern.

Compile-time constant expressions of type String are always “interned” so as to share unique instances, using the method String.intern.

String.intern是一种本机方法,我们可以在its declaration in OpenJDK看到:

public native String intern();

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

也就是说,使用本机代码实现字符串实习,并且没有Java API直接访问字符串池。但是,您可以为此而自己编写本地方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值