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

  • 相关阅读:
    【初学EXT】布局练习
    创建型模式总结(补充UML类图)
    数据库基本概念总结
    Word2010操作技巧总结
    VMWare虚拟机磁盘压缩和上网总结
    第一次用word2010发布文章到博客园记
    设计模式学习总结一原则及创建型模式
    为什么要开始写blog?
    Delphi异常处理总结
    设计模式总结之行为型模式
  • 原文地址:https://www.cnblogs.com/rrttp/p/7639273.html
Copyright © 2011-2022 走看看