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 }
  • 相关阅读:
    XCode Playground Overview
    Swift开发学习(二):Playground
    swift网址
    swift关于is和as的解释
    Swift之 ? 和 !
    Swift 学习之二十一:?和 !(详解)
    Swift学习三
    Makefile project
    20171110面试笔记 服务器端程序员+C/C++开发
    关键字
  • 原文地址:https://www.cnblogs.com/billmiao/p/9872196.html
Copyright © 2011-2022 走看看