zoukankan      html  css  js  c++  java
  • String类型 堆/字符串池的理解

     1 package test;
     2 
     3 public class StringTest {
     4 
     5     public static void main(String[] args) {
     6 
     7         /**
     8          * 创建过程:
     9          * 1.检查StringPool(字符串池)里是否有"aaa"对象,这里没有,创建StringPool的字符串对象"aaa"
    10          * 2.在jvm堆里创建字符串对象"aaa"
    11          * 所以,这里创建了2个对象
    12          */
    13         String s = new String("aaa");
    14 
    15         /**
    16          * 创建过程:
    17          * 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
    18          * 所以,这里并没有创建对象
    19          */
    20         String s2 = "aaa";
    21 
    22         /**
    23          * 创建过程:
    24          * 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
    25          * 2.在jvm堆里创建字符串对象"aaa"
    26          * 所以,这里创建了1个对象
    27          */
    28         String s3 = new String("aaa");
    29 
    30         /**
    31          * intern方法的作用:返回调用对象的字符串池里的字符串对象的引用
    32          */
    33         String s4 = s.intern();
    34 
    35         String hello = "hello";
    36         String hel = "hel";
    37         String lo = "lo";
    38 
    39         /**
    40          * 打印true
    41          * 如果右边计算不涉及变量计算,全部都是常量,不会产生新的对象
    42          * 所以返回的是字符串池里的对象引用
    43          */
    44         System.out.println(hello == "hel" + "lo");
    45         /**
    46          * 打印false
    47          * 右边计算涉及变量计算,有对象操作,会产生一个新的对象
    48          * 所以返回的是堆的对象引用
    49          */
    50         System.out.println(hello == "hel" + lo);
    51     }
    52 
    53 }
  • 相关阅读:
    ghost版本xp安装iis的问题
    装vs2005 sp1出现数字签名错误的解决办法
    FLEX对整个截屏或单个UI进行截图
    在Apache环境下成功的运行ASP.NET
    向园子的高手们求救 关于45斜视地图的寻路
    第一次在博客里面写东西
    在 Linux 下运行 ASP.NET 2.0
    sql left join inner jion 区别
    C# 图片识别(支持21种语言)
    5、Java并发编程:Lock
  • 原文地址:https://www.cnblogs.com/billmiao/p/9872196.html
Copyright © 2011-2022 走看看