python 数组拼接_【转】String字符串的创建,拼接及底层实现

String

由于其底层数组是private final的,不可改变,且没有提供任何操作其私有数组的方法,所以String字符串是不可改变的。

5856a053bfa0dfe142d87d91c73a6c35.png

常量池(与字符串息息相关)

任何好的编程语言的关键目标之一是高效的使用内存,随着应用程序的增长,String字面值占用大量的内存非常常见。对程序而言,全部String字面值中往往有大量的冗余,为了使java更高效地使用内存,JVM留出一块特殊的内存区域,称为“String常量池”。当编译器遇到String字面值时,它检查该池内是否已经存在相同的String字面值。如果找到,则将新的字面值的引用指向现有的String,而不创建任何新的String字面值对象。

字符串创建方式(两种)

字面量赋值的方式

b3a48cead52ac18cfe8648b4546925f2.png

通过new + 构造器的方式

String s = new String(“abc”);
方式创建对象,在内存中创建了几个对象?
两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:“abc”

9608d85dc077deba9657fa2a9377c38f.png

String字符串的拼接方式(三种)

说明
1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
2.只要其中一个是变量,结果就在堆中。

第一种 字面值常量拼接

在常量池中进行,在字符串常量池中查找需要的字符串,如果找到,则指向给String引用,找不到则新建所需字符串,将地址指向给String引用。因为字符串常量池中不能存在相同字符串,每次拼接都要新建字符串,不能在原有字符串上进行修改。

73cc94e84996419426e3150d5e206697.png

ad03b7b9651cfbbe98304a012e172186.png

第二种 变量和常量拼接

1a81f542250b3f451345f193d1eb55eb.png

第三种 变量和变量拼接

61202f213c19e1f4349cf8dcc3702c48.png

字符串使用+拼接时,一旦有变量参与,在堆中,底层会转成StringBuilder 并使用append完成拼接。运算完成后,在转换成String返回。而且,这个转换后的String存在堆区

0a439320663dba7e5825fab00bc61ba6.png

转载于:String字符串的创建,拼接及底层实现 - 程序员大本营

更多学习内容:

Python字面值 - 网易云课堂​study.163.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值