为什么String类型不可变

本文解释了Java中String类型不可变性的原理,主要涉及final修饰导致的不可继承和重写、final修饰数组确保其地址不变以及private封装阻止外部修改。通过官方源码分析,揭示了String如何在使用API方法时创建新对象以保持不变性。
摘要由CSDN通过智能技术生成

要想了解String类型为什么不可变,我们先来了解一下什么是不可变?

引言

不可变

不可变就是指这个类,一旦被实例之后,无法修改类的状态以及内容。

看到这个代码之后,有人说这个不是变了吗?我们来画个图理解一下 

左边为栈,右边为堆。

注意这里所说的不可变,不是指内容不可变,而是指string这个引用对象不可发生变化,没有任何改变。这是重新指向了另一个字符串的意思。

1.String类型为什么不可变

要想了解string类型为什么不可变,看string官方源码是最好的选择

String类型为什么不可变,我总结了一下三个原因:

①final修饰的类

首先我们看到这个类是被final修饰的,这就意味着这个类是不可以被继承和重写的,就破坏了string这个类可变的性质

②final修饰的常量

其次,我们看到的这个数组是被final修饰的,被final修饰的数组是也是不可改变的(当然这里指的也是数组的地址)。

将一个数组指向到另一个数组上,编译器直接报错

③private修饰的数组

最后是private进行封装、修饰的这个数组,没有提供任何方法,也是无法被外部使用改变的。

最后值得一提的是:如果你想利用String其他API方法,去修改这个数组也是万万不可能的,他也会重新创建一个string对象,这里也可以看一个源码

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值