zoukankan      html  css  js  c++  java
  • String 的存储

    方法区中的运行时常量池(Runtime Constant Pool)

    1 String a = "abc";
    2 String b = "abc";
    3 System.out.println(a == b);
    

    此时打印的是 trueabc 存放于方法区中的运行时常量池,1执行时,去常量池中查找,是否存在 abc,如果不存在就创建常量 abc。2执行,也去常量池查找是否存在 abc,存在就直接将 b 的地址指向 abc,最后 a==b 返回的就是 true,因为都指向同一块内存地址。

    堆(heap)中

    String a = "abc";
    String b = new String("abc");
    System.out.println(a == b);
    

    此时打印的是 falsenew String("abc")是在堆中开辟内存, a 指向的是运行时常量池中的 abcb 指向的是堆中的 abc,地址不同。

    intern()

    String a = "abc";
    String b = new String("abc");
    System.out.println(a == b.intern());
    

    打印 true,与上面的相比,b 多调用了 intern() 方法,该方法会将堆中的数据挪至常量池中。

  • 相关阅读:
    登录界面
    动手动脑
    关于二进制
    Java考试
    D
    威尔逊定理 k!%p
    11.46.2020质检
    最长上升序列输出方案
    问题 G: 汽车的最终位置
    奶牛大会(二分)
  • 原文地址:https://www.cnblogs.com/Godfunc/p/11075978.html
Copyright © 2011-2022 走看看