zoukankan      html  css  js  c++  java
  • 通过反编译深入理解Java String及intern

    参考:

    1,通过反编译深入理解Java String及intern

    http://www.importnew.com/21024.html#comment-577875

    2,Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    http://www.cnblogs.com/paddix/p/5309550.html

    3,String 和 new String()的区别

    http://blog.csdn.net/u012925323/article/details/46989201

    常见面试题解答

    有了对以上的知识的了解,我们现在再来看常见的面试或笔试题就很简单了:

    Q:String s = new String(“xyz”),创建了几个String Object?

    A:两个,常量池中的”xyz”和堆中对象。

    Q:下列程序的输出结果:

    String s1 = “abc”;
    String s2 = “abc”;
    System.out.println(s1 == s2);

    A:true,均指向常量池中对象。

    Q:下列程序的输出结果:

    String s1 = new String(“abc”);
    String s2 = new String(“abc”);
    System.out.println(s1 == s2);

    A:false,两个引用指向堆中的不同对象。

    Q:下列程序的输出结果:

    String s1 = “abc”;
    String s2 = “a”;
    String s3 = “bc”;
    String s4 = s2 + s3;
    System.out.println(s1 == s4);

    A:false,因为s2+s3实际上是使用StringBuilder.append来完成,会生成不同的对象。

    Q:下列程序的输出结果:

    String s1 = “abc”;
    final String s2 = “a”;
    final String s3 = “bc”;
    String s4 = s2 + s3;
    System.out.println(s1 == s4);

    A:true,因为final变量在编译后会直接替换成对应的值,所以实际上等于s4=”a”+”bc”,而这种情况下,编译器会直接合并为s4=”abc”,所以最终s1==s4。

    Q:下列程序的输出结果:

    String s = new String(“abc”);
    String s1 = “abc”;
    String s2 = new String(“abc”);

    System.out.println(s == s1.intern());
    System.out.println(s == s2.intern());
    System.out.println(s1 == s2.intern());

    A:false,false,true,具体原因参考(通过反编译深入理解Java String及intern)第二部分内容。

  • 相关阅读:
    Sass--扩展继承
    Sass--混合宏的不足
    学习笔记47—PhotoShop技巧
    学习笔记46—如何使Word和EndNote关联
    学习笔记45—Linux压缩集
    学习笔记44—Linux下安装freesurfer
    学习笔记43—Linux安装集
    学习笔记42—Win7下安装Linux双系统
    学习笔记41—ttest误区
    学习笔记40—endnote点点滴滴
  • 原文地址:https://www.cnblogs.com/rrttp/p/7639273.html
Copyright © 2011-2022 走看看