DESKTOP-E68IKVH_20200828-魏海荣

一、问题:

    
    String s = "hello" ;
    
    char[] data = { 'h' , 'e' , 'l' , 'l' , 'o' };
    String x = new String( data );
    
    
    String t = x.intern();
    
    System.out.println( s == x ); // false
    System.out.println( t == s ); // true
    System.out.println( x == t ); // false


    char[] data = { 'h' , 'e' , 'l' , 'l' , 'o' };
    // 为了避免在字符串池中创建"hello"对应的String实例,所以这里是采用char数组创建String实例
    String x = new String( data );
    
    // 调用x.intern()时, 会首先检查 字符串池 中是否存中与x相等的String实例,
    // 若已存在则直接返回字符串池中的String实例的引用
    // 若不存在,则将x对应的String实例添加到字符串池中后返回该实例的引用
    // (现行的JVM中不是在字符串池创建新的String实例而是将x对应的String实例直接添加到字符串池中)
    String t = x.intern();
    
    // 当出现"hello"时会首先查找 字符串池 中是否已经存在 与之相等的 String实例,
    // 若存在则返回字符串池中的String实例的引用
    // 若不存在,则在 字符串池 中创建一个新的表示"hello"的String实例,随后返回该实例的引用
    String s = "hello" ;
    
    System.out.println( s == x ); // true
    System.out.println( t == s ); // true
    System.out.println( x == t ); // true

}

这里没看懂,与顺序有关的是x 与 s 的顺序还是String t = x.intern();这个方法的顺序。

二吐槽:

上课感觉听懂了,下来就不会了。可能是感冒头晕脑子不合适了。