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

  • 相关阅读:
    github打开慢,甚至打不开
    在使用confluent-kafka-go 时遇到如下问题
    Istio Routing极简教程
    kubelet证书过期解决方法
    工具类docker for k8s
    selenium jar包 的下载地址,各版本都有
    使用TestNG进行多浏览器,跨浏览器和并行测试
    简单聊聊TestNG中的并发
    清除Git仓库多余文件及其历史记录 
    【MAVEN】maven系列--pom.xml标签详解
  • 原文地址:https://www.cnblogs.com/rrttp/p/7639273.html
Copyright © 2011-2022 走看看