java - 字符串不能改变。但是int、char是可以改变的

标签 java string char int

我读到在 Java 中,String 类型的对象不能改变。但是 int 和 char 变量可以。为什么?能举个例子吗?

谢谢。 (我是新人-_-)

最佳答案

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

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

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

我想最好的表达方式是,当示例的第 2 行执行时,内存中的一个新字符串是通过连接原始字符串和添加到其中的字符串创建的。 str 变量只是对内存位置的引用,然后更改为指向刚刚创建的新变量。

我对这一点不是特别了解,但据我了解,所有“非原始”值都会发生这种情况。任何在某个时候派生自 Object 的东西都遵循这些规则。原始值,如 ints、bools、chars、floats 和 double 允许更改内存中的实际值。所以,从这个:

int num = 5;
num += 2;

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

至于为什么会这样,这只是 Java 开发者的设计决定。我敢肯定有人会评论为什么这样做,但我不知道。

关于java - 字符串不能改变。但是int、char是可以改变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1956376/

相关文章:

java - 将 Java 加密算法移植到 C++ OpenSSL

c# - string.Join 奇怪的行为

java - 无法显示循环中的所有字符

c - 以十六进制逐字节打印打开文件

c - strncpy 不能正确存储字符 C

java - 使用@OneToMany时JPA结果无限循环

java - jackson 无法实例化 ArrayList

java - 排序集合的最快方法

javascript - 在 JavaScript 字符串中获取单词 #n

c++ - 如何从 payload unsigned char buf 获取 IP 和 PORT?