当前位置: 代码迷 >> java >> 为什么String.intern()是本机方法?
  详细解决方案

为什么String.intern()是本机方法?

热度:52   发布时间:2023-07-31 11:31:11.0

使此方法本地化的逻辑背后是什么?

与仅使用散列图制作内部字符串池相比,优点是什么?

看起来有些奇怪,但似乎在非本地代码中很容易做到:

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;
        }

    }

    // ...

}

那么为什么是本机代码呢?

看起来用非本地代码很容易...

你错了。 根据规范, String.intern()必须与常量池进行交互,才能满足“所有文字字符串都应被嵌入”的要求。 用Java代码无法做到这一点。

  相关解决方案