怎么理解String类内容和长度是不可改变的?

具体问题:“由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容和长度是不可改变的。”这句话应该怎样分析呢?

img

我知道上图不是正确的分析角度,但是不知从何分析,既然String是final类为何String类引用变量是可以再赋值的,不会像下图一样报错?

img

这个正好我昨天学习了一下,原因:
java 中String 确实是一个final类,如果创建了一个字符串比如 String str="hello",我们让 str="world",打印str会发现结果变了,但是实际上这个str的地址已经改变了,编译器自动开辟一个新地址接收新的结果,那之前的”hello“去哪儿了呢,他存放到了堆区的方法区里,叫做"串池"。StringBuffer类在现在的JDK版本已经集合不用了,效率低,都是在用StringBuild类。

img

黑马教程是这样写的

img

java对象都是引用的,你改变的不是原来那个内存,改变的是one的指向