字符串无法更改。但是int,char可以改变

2022-09-04 05:49:31

我已经读到,在Java中,String类型的对象无法更改。但是 int 和 char 变量可以。这是为什么呢?你能给我举个例子吗?

谢谢。(我是较新的 -_- )


答案 1

正如bzabhi所说,字符串在Java中是不可变的。这意味着字符串对象永远不会更改。这并不意味着您不能更改字符串变量,只是您无法更改字符串的基础内存表示形式。例如:

String str = "Hello";
str += " World!";

执行这些行后,str 将指向内存中的新字符串。原始的“Hello”字符串仍然存在于内存中,但很可能它不会存在很长时间。假设没有情有可原的情况,没有任何东西会指向原始字符串,因此它将被垃圾收集。

我想最好的方法是说,当示例的第2行执行时,从原始字符串的串联和添加到其中的字符串创建内存中的新字符串。str 变量只是对内存位置的引用,然后更改为指向刚刚创建的新变量。

我对这一点不是特别了解,但是,据我所知,这就是所有“非原始”值所发生的事情。在某些时候从 Object 派生的任何内容都遵循这些规则。基元值(如整数、布尔值、字符、浮点数和双精度值)允许更改内存中的实际值。所以,从这里开始:

int num = 5;
num += 2;

内存中的实际值会发生变化。此代码示例无需创建新对象并更改引用,只需更改内存中 num 变量的值即可。

至于为什么这是真的,这只是Java制造商的设计决策。我相信有人会评论为什么这样做,但这不是我知道的事情。


答案 2

int 和 char 也不能更改。与字符串一样,您可以将不同的值放入同一变量中,但整数本身不会更改。3 将永远是 3;您不能将其修改为 4。