【JavaSE】:String(二):深入String

本文详细阐述了Java中字符串的存储机制,强调了String的不可变性以及为何避免直接修改。介绍了StringBuilder和StringBuffer的区别,指出前者可修改且效率高,后者线程安全但同步开销大。
摘要由CSDN通过智能技术生成

一.字符串的存储

我们知道双引号里的数据都是字符串常量,储存在字符串常量池当中。

例子

在这里插入图片描述

在这里插入图片描述

直接使用==是比较地址。字符串常量池有一个特点;它会先检查该常量是否已经存在,如果存在则不再新建。在官方文档里实际上是没有字符串常量池的概念,它底层是一个C++的hash表。它准确来说在方法区,而方法区在堆里。

在这里插入图片描述

二.字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变。

String类在设计时就是不可改变的,String类实现描述中已经说明了

在这里插入图片描述

String类中的字符实际保存在内部维护的value字符数组中,而value是由private修饰的,所以不能提供[]修改value该图还可以看出:

  1. String类被final修饰,表明该类不能被继承。
  2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

纠正 :网上有些人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。这种说法是错误的,不是因为String类自身,或者其内部value被final修饰而不能被修改。

final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

三.字符串修改

注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

在这里插入图片描述

但是这种方式不推荐使用,因为其效率非常低,中间创建了许多临时对象。虽然看起来只有三个对象,实际上远远不止。

验证一下究竟会产生多少临时对象

1.使用String直接使用+=进行拼接
2.使用StringBuffer调用append进行追加
3.使用StringBuilder调用append进行追加

在这里插入图片描述

在这里插入图片描述

下面就来聊聊StringBuffer和StringBuilder是什么。

四.StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法。

在这里插入图片描述

一些使用例子

在这里插入图片描述

从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
1.String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
2.StringBuilder变为String: 调用toString()方法。

总结

String、StringBuffer、StringBuilder的区别:
1.String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
2.StringBuffer与StringBuilder大部分功能是相似的
3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸蛋挞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值