String类的特点

1.String类的特点

1.java程序中,只要是双引号字符串,就都是String类的对象 如图

只有String这一个类有这种特殊的创建对象方法

我们知道,只有对象才可以通过 点什么来调用方法,而图中s.toString等方法都可以调用,所以s就是String的对象

.

2.字符串在创建之后,内容不可更改 如图

这该如何解释?我们不妨先看看下图

上图中,stu原本是18,张三的,但是却被新创建的对象20,李四给覆盖掉了,导致最终打印出来的是新的对象

所以,上图中的s并不是被改变了内容,而是因为"def"也是双引号字符串,也是一个新的对象,s被新的对象覆盖了,所以打印的是def,但原来的"abc"是没有被改变的

3.String字符串虽然不能改变,但可以共享

如图 打印出来的是false还是true呢?

答案是true,在回答为什么是true之前,我们需要知道一个新的知识——字符串常量池

4.字符串常量池

我们使用内存图对刚才的s1,s2比较进行解释

当执行到s1时,创建出双引号对象"abc",这时,程序会去字符串常量池检查是否有"abc"这个对象,发现没有abc,所以在字符串常量池里创建"abc",然后产生地址,记录给s1

接着执行s2,还是创建双引号对象"abc",程序依旧去字符串常量池检查是否有"abc"这个对象,这时发现存在,那就直接把地址赋给s2

s1和s2的地址都一致,引用数据类型使用==进行比较,比较的是地址值,所以打印的true

.

字符串常量池所在的内存位置

所以,以后字符串常量池基本都出现在堆内存中

posted @ 2024-11-30 14:45  直実  阅读(41)  评论(0)    收藏  举报