Java String Pool–String s = new String(“a”) 到底创建了几个对象?

本篇重点(tips):

  1. String Pool 是以Java 中 String 对象是不可变的这一特性为基础的

  2. String Pool是Heap(堆)中的一块特殊空间(JDK 1.7 之前不是,是在PermGen里面,从1.7开始在heap里面了),存储不重复的String 常量

  3. 用new关键字和用 “” 创建String 的方式有所不同。new 关键字每次都会在heap中创建一个新的String 对象, 用”” 创建(这种创建方式学名儿叫String Literal),如果String Pool中已经存在相同值的String 对象则直接返回。这两种方式创建的都是String Object.

实例讲解

line 1: String s = new String(“A”)

这是我们的第一行代码, 在String Pool中没有”A”这个常量, 所以会先在String Pool中创建”A”。 然后因为有new关键字, 也会在Heap 中也创建一个对象”A”,s指向heap中创建的”A”对象。 所以在这一步中创建了两个对象。如图:

Java String Pool--String s = new String("a") 到底创建了几个对象?

line 2: String s1 = new String(“A”)

这时候String Pool 中已经有了对象”A”,String Pool中不再创建。 但因为new关键字,会在heap中再创建一个新的对象”A”, s1指向这个新创建的对象。如图:

Java String Pool--String s = new String("a") 到底创建了几个对象?

line 3: String s2 = “A”

查看String Pool中有”A” , 直接指向它

line 4: String s3 = “B”

在String Pool中不存在”B”,在String Pool中创建”B”

line 5: String s4 = “A”

查看String Pool中有”A” , 直接指向它

最终如下图所示:

Java String Pool--String s = new String("a") 到底创建了几个对象?

运行代码测试:

1         String s = new String("A");
 2         String s1 = new String("A");
 3         String s2 = "A";
 4         String s3 = "B";
 5         String s4 = "A";
 6
 7         System.out.println("s == s1:"+(s == s1));
 8         System.out.println("s == s2:"+(s == s2));
 9         System.out.println("s1 == s2:"+(s1 == s2));
10         System.out.println("s2 == s4:"+(s2 == s4));
11         System.out.println("s2 == s3:"+(s2 == s3));

结果:

s == s1:false
s == s2:false
s1 == s2:false
s2 == s4:true
s2 == s3:false

注意line 7~line 11, 比较操作要加上() 哦, 第一次跑的时候没加,结果都是false,仔细看了一下才想起来,算数运算符的优先级高于比较运算符。有时候我们知道一件事,但应用中还是容易忽略。

结论:

所以尽量还是使用””(Literal)的方式创建String, 这样值相同的String使用Pool中这一个对象, 节省空间。这个做法学名儿又叫String interning。

Original: https://www.cnblogs.com/adeline-tech/p/16653425.html
Author: adeline.pan
Title: Java String Pool–String s = new String(“a”) 到底创建了几个对象?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/604452/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【面试要点】判断企业基本信息——新型骗局“招聘转培训”

    核心保护 请一定要对个人的身份证与银行卡留有心眼,不要给任何人有中途拿取的操作。 手机不要离手,且一定要设置安全级别较高的密码。 时刻都要保持录音,无论是不是在签合同。 不允许签了…

    数据结构和算法 2023年6月8日
    0125
  • 数据结构-抽象数据类型

    1 抽象数据类型 1.1 定义 抽象数据类型(Abstract Data Type-ADT)一个数学模型和在该模型上定义的操作集合的总称 ADT是程序设计语言中数据类型概念的进一步…

    数据结构和算法 2023年6月8日
    0102
  • 二进制状态压缩

    二进制状态压缩 取出整数n在二进制表示下的第k位: (n>>k)&1 取出整数n在二进制下的第0~k-1位 n&((1<<k)-1) &lt…

    数据结构和算法 2023年6月8日
    095
  • 欧拉回路

    (0.) 由来 哥尼斯堡七桥问题。如图 在所有桥都只能走一遍的前提下,如何才能把这个地方所有的桥都走遍?。显然是不行。如果可以满足一笔画,必须使除了起点和终点的所有点的度数必须是偶…

    数据结构和算法 2023年6月12日
    0102
  • 无旋树堆(FHQ-Treap)学习笔记

    无旋树堆(一般统称 (\text{FHQ-Treap})),是一种平衡树。可以用很少的代码达到很优秀的复杂度。 前置知识: 二叉搜索树(\text{BST}) (\text{Tre…

    数据结构和算法 2023年6月12日
    0105
  • POJ 2348 Euclid’s Game(博弈论 辗转相减)

    题目: ​ 给出两个数,A,B轮流操作。每次操作可以将大的数减去小的数的整数倍,若操作后出现0,执行这次操作的人胜。 思路: ​ 根据样例(25, 7)的提示,其实是非常容易想到的…

    数据结构和算法 2023年6月12日
    092
  • 留言板

    大道至简,知易行难。 花径不曾缘客扫,蓬门今始为君开。 从今天开始改变,这是对平庸生活最好的回击。 你好,我叫浅夏诗吟 😃 本文来自博客园,作者:浅夏诗吟,转载请注明原文链接:ht…

    数据结构和算法 2023年6月7日
    0111
  • 组合数学 1

    题都是好题,会的没几道。 using mint = modint1000000007; /* n = r if i != x: dp[i][l][r] = dp[i-1][l-1]…

    数据结构和算法 2023年6月12日
    0110
  • 使用JMeter进行性能测试(压力测试)

    一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些…

    数据结构和算法 2023年6月12日
    0106
  • 队列的模拟及环形队列思路

    定义 队列是一个 有序列表,可以用 数组或是 链表来实现。 遵循 先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 模拟思路 队列本身是有序列表,若使用数组的结构来…

    数据结构和算法 2023年6月12日
    0111
  • 多重背包 II —— 二进制优化

    核心思想 (前提建议先把多重背包朴素版算法搞清楚 ) 转换成0 ~ 1背包问题,对个体拆分后全部打散,反正能够保证从全局上使得所有情况依然存在就可以了。 举例分析(以下都使用该样例…

    数据结构和算法 2023年6月7日
    098
  • 【HDU 1260 】Tickets (简单dp)

    Descriptions: 现在有n个人要买电影票,如果知道每个人单独买票花费的时间,还有和前一个人一起买花费的时间,问最少花多长时间可以全部买完票。 Input 给出 N(1 O…

    数据结构和算法 2023年6月14日
    096
  • 个人介绍

    开罐即食。 开罐即食。 posted @2022-09-26 21:57 qAlex_Weiq 阅读(2501 ) 评论() 编辑 Original: https://www.cn…

    数据结构和算法 2023年6月12日
    0107
  • 线性表的基本操作

    在粗略学习一遍数据结构之后,压根就没有搞懂其中的逻辑,后来了明白学习数据结构的重要性,打算再利用一大段空闲时间重新拾起数据结构的学习。还站在IT行业门口的我,打算一步一步爬进去,跪…

    数据结构和算法 2023年6月7日
    077
  • 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗

    开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东…

    数据结构和算法 2023年6月7日
    0144
  • 【Unity】 脚本实现对象自由移动(第一人称)

    建立一个脚本名称为:Move(与脚本内命名空间一致) using System.Collections; using System.Collections.Generic; usi…

    数据结构和算法 2023年6月16日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球