Java虚拟机 - 练习题

    科技2024-01-23  99

    StringTable 练习

    // 常量池中的字符串仅是符号,第一次使用时才会变为对象 String s1 = "a"; // 会把 a 符号变为 "a" 字符串对象,此时串池 StringTable["a"] String s2 = "b"; // 会把 b 符号变为 "b" 字符串对象,此时串池 StringTable["a", "b"] String s3 = "ab"; // 会把 ab 符号变为 "ab" 字符串对象,此时串池 StringTable["a", "b", "ab"] String s4 = "a" + "b"; // 由于在编译器确定为 ab 符号,因此不会创建新的字符串对象,直接沿用串池中已有的对象 String s5 = s1 + s2; // 等价于 new StringBuilder().append("a").append("b").toString() -> new String("ab") String s6 = s5.intern(); // 将这个字符串对象尝试放入串池,如果有则并不会放入,如果没有则放入串池,会把串池中的对象返回 String s7 = new String("ab"); String s8 = s1 + "b"; System.out.println(s3 == s4); // true,因为 s3 和 s4 字符串对象都在串池中 System.out.println(s3 == s5); // false,因为 s3 字符串对象在串池中,而 s5 字符串对象在堆中 System.out.println(s3 == s6); // true,因为 s3 和 s6 字符串对象都在串池中 System.out.println(s3 == s7); // false System.out.println(s3 == s8); // false
    Processed: 0.009, SQL: 9