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)第二部分内容。

  • 相关阅读:
    软件版本具体代表什么意思
    面向接口的编程
    MySQL mysqldump用法
    常见问答解答
    Perl 语言笔记
    JAVA 基础知识
    面向接口编程的基本原则
    判断文件存在与否【Linux】
    Gtk Label设置字体颜色
    解压缩路径设置【Linux】
  • 原文地址:https://www.cnblogs.com/rrttp/p/7639273.html
Copyright © 2011-2022 走看看