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

时间:2015-07-17 23:54:42

标签: java

将此方法本机化的原因是什么?

使用哈希映射创建实体化字符串池的优势是什么?

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

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 个答案:

答案 0 :(得分:4)

  

在非本机代码中似乎很容易做到......

你错了。根据规范,String.intern()必须与常量池进行交互,以满足“所有文字字符串被实习”的要求。这不能用Java代码完成。