美文网首页
KOTLIN中的String.intern()与JAVA中的St

KOTLIN中的String.intern()与JAVA中的St

作者: JoeyTsai | 来源:发表于2018-03-07 10:23 被阅读0次

    layout: post

    title: KOTLIN中的String.intern()与JAVA中的String.intern()区别

    categories: KOTLIN

    description: KOTLIN中的String.intern()与JAVA中的String.intern()区别

    keywords: KOTLIN

    KOTLIN代码

    package num2
    
    /**
     * Created by Joey_Tsai on 2018/3/6.
     */
    public class RuntimeConstantPoolOOM2_7{
    
    }
    
    fun main(args: Array<String>) {
        val str1 : String = StringBuilder("计算机").append("软件").toString()
        println(str1.intern() == str1)
    
        val str2 : String = StringBuilder("ja").append("va").toString()
        println(str2.intern() == str2)
    }
    

    运行结果


    KOTLIN中的intern()

    JAVA代码

    
    /**
     * Created by Joey_Tsai on 2018/3/7.
     */
    public class Test1 {
        public static void main(String[] args) {
            String str1 = new StringBuilder("计算机").append("软件").toString();
            System.out.println(str1.intern()==str1);
    
            String str2 = new StringBuilder("ja").append("va").toString();
            System.out.println(str2.intern() == str2);
        }
    }
    
    

    运行结果


    JAVA中的intern

    相关资料

    在JDK1.6中,intern()会把首次遇到的字符串实例复制在永久代中,返回的
    也是永久代中这个字符串实例的引用,而StringBuilder创建的字符串实例
    在java堆上,所以必然不是同一个引用,将返回false。而JDK1.7中的
    intern()实现不会再复制实例,只是在常量池中记录首次出现的引用,因此
    intern()返回的引用和由StringBuilder创建的那个字符串实例是同一个。对
    于str2返回false是因为'java'这个字符串在执行StringBuilder.toString()之前
    已经出现过,字符串常量池已经有它的引用,不符合首次出现原则,而'计
    算机软件'这个字符串则是首次出现返回true。  
    
    关于
    String str2 = new StringBuilder("ja").append("va").toString();
    System.out.println(str2.intern() == str2);
    个人认为"java"一开始就存在常量池中
    

    原因

     TODO:
    

    相关文章

      网友评论

          本文标题:KOTLIN中的String.intern()与JAVA中的St

          本文链接:https://www.haomeiwen.com/subject/gnzdfftx.html