• 通过反编译深入理解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)第二部分内容。

  • 相关阅读:
    Delphi使用资源文件全攻略
    Javascript URL编码方法的比较
    评论:人才流失强力折射出现实畸形人才观
    AJAX从服务端获取数据的三种方法
    Builder 生成器模式(创建型模式)
    tsql中使用参数设置取值范围
    无法使用多维数据库模型创建报表模型
    报表模型_继承其他实体的属性
    Adapter 适配器(结构型模式)
    报表模型_指定点击链接型报表选项
  • 原文地址:https://www.cnblogs.com/rrttp/p/7639273.html
Copyright © 2020-2023  润新知