博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的String真的是不可变的吗?
阅读量:4292 次
发布时间:2019-05-27

本文共 847 字,大约阅读时间需要 2 分钟。

首先,Java中的String对象一旦被创建就具备不可修改的特性,对String对象的任何操作都不能改变原来String的值,任何改变的操作都会产生一个新的对象。为了验证这个特性,我们来看一个小实验:

通过这个实验我们会发现一个问题,就是对字符串String的任何操作(改变大小写、替换等)都不会影响字符串对象hello本来的值,但是这些更改的操作会产生一个新的对象,新的对象确实拥有了修改后的新值。

String类还有一个非常重要的特征,就是String类是final修饰的,也就是我们通常所说的“最终类”,这说明String类放弃了拥有子类的权利,看一下Java官方文档(jdk9)对String类的描述:

通过这个描述可以清晰的看到String类的定义是final的。

其实,Java中的String类虽然看似简单明了,但是关于String的内容远比看起来的要复杂的多,因为String涉及到了JVM中三个关键的概念,分别是“常量池”、“栈”和“堆”。由于String类的频繁使用会占用大量的时间(空间),所以JVM为String类创建了一个存放字符串的“常量池”,池中存放了大量的字符串常量。为了理解这个字符串常量池,我们可以看一个简单的实验:

通过这个实验我们可以看出,两个对象StringA和StringB是指向同一个字符串常量,所以他们对比的返回值是true。接着看下面这个例子:

这个例子却返回了截然不同的结果,原因在于new每次会创建一个新的对象,所以对比的结果是false(关于这个解释其实可以描述的非常复杂,这里就略了)。

关于String的内容虽然看似简单,实则比较复杂,我们能通过String类来解释很多JVM的运行机制,所以String类是一个值得深究的类。

我使用Java语言多年,我也出版过关于Java编程的书籍,我会陆续在头条上写一些关于Java方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。

如果有Java方面的问题,也可以咨询我。

谢谢!

转载地址:http://rizws.baihongyu.com/

你可能感兴趣的文章
anaconda 清华源挂了 怎么办 上交源ok
查看>>
vnpy2.0安装后报错ModuleNotFoundError: No module named 'vnpy.api.ctp.vnctpmd'
查看>>
东航期货穿透接口相关资料
查看>>
VNPY2.0火币期货交易接口配置使用
查看>>
win10和ubuntu18双系统时间同步(20190604亲测可行)
查看>>
重启小狼毫输入法,rime输入法重启
查看>>
命令行或终端ImportError:No module named(pycharm运行没问题)
查看>>
量化策略回测01双均线
查看>>
量化策略回测ATRRSI
查看>>
量化干货:量化交易系统设计的六大细节
查看>>
量化策略回测ocobreak
查看>>
量化策略回测tdma
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
ubuntu18字符终端不支持中文问题(汉字菱形)
查看>>