问题描述
使此方法本地化的逻辑背后是什么?
与仅使用散列图制作内部字符串池相比,优点是什么?
看起来有些奇怪,但似乎在非本地代码中很容易做到:
import java.util.HashMap;
public class String {
// ...
private final static HashMap<String, String> pool = new HashMap<>();
public String intern() {
if (pool.containsKey(this))
return pool.get(this);
synchronized (pool) {
if (pool.containsKey(this))
return pool.get(this);
pool.put(this, this);
return this;
}
}
// ...
}
那么为什么是本机代码呢?
1楼
看起来用非本地代码很容易...
你错了。
根据规范, String.intern()
必须与常量池进行交互,才能满足“所有文字字符串都应被嵌入”的要求。
用Java代码无法做到这一点。