7.4 两种实例化方式比较

发布时间 2023-06-06 16:08:21作者: 盘思动
  • 本节课,视频讲的有点抽象。具体内容结合看书来理解看看???????

demo

public class HelloWorld {
    public static void main(String[] args){

        String strA = "mldn";
        String strB = new String("mldn").intern();
        System.out.println(strA == strB);// true
    }
}

在Java中,String类的intern()方法是一个比较特殊的方法,它可以将当前字符串对象(也就是 this)放入到常量池中,并返回常量池中该字符串的引用。
如果常量池中已经存在该字符串,则直接返回该字符串的引用。

具体来说,String类中的intern()方法会首先检查常量池中是否存在与调用者equals相等的字符串,如果存在,则直接返回常量池中这个字符串的引用;
如果不存在,则将该字符串对象添加到常量池中,并返回常量池中这个字符串的引用。

在实际开发中,使用intern()方法可以提高字符串的存储效率和比较效率。因为在Java中,由于字符串常量池的存在,相同的字符串只需要在内存中存储一份,可以节省内存空间;
而使用intern()方法将字符串存储到常量池中,可以减少字符串的创建,提高字符串比较效率。

需要注意的是,在JDK6及以下版本中,字符串常量池位于永久代,较小且易于溢出,因此在大量使用字符串的场景下,可能会导致OOM(Out Of Memory)异常。
而在JDK7及以上版本中,字符串常量池被移到了堆中,因此不再容易出现OOM问题,但是也需要注意不要滥用intern()方法,否则可能会产生其他问题。