当前位置: 首页 > 面试题库 >

字符串不能改变。但是int,char可以改变

史淇
2023-03-14
问题内容

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

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


问题答案:

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

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

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

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

我并不是特别了解这一点,但是据我了解,这就是所有“非原始”价值的情况。从Object导出的任何东西都遵循这些规则。原始值(例如int,bool,char,float和double)允许更改内存中的实际值。因此,从此:

int num = 5;
num += 2;

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

至于为什么如此,这只是Java制造商的设计决定。我敢肯定有人会评论为什么这样做,但这不是我所知道的。



 类似资料:
  • 既然字符串是不可变的,我们如何将字符串更改为示例 现在我正在做 它将打印“你好玛纳斯”。所以字符串s1会改变。 那么,你怎么能说字符串是不可变的呢?

  • 问题内容: 关于id类型对象str(在python 2.7中)的某些事情使我感到困惑。该str类型是不可变的,因此我希望一旦创建它,​​它将始终具有相同的id。我相信我说的话不太好,所以我将发布一个输入和输出序列的示例。 因此与此同时,它一直在变化。但是,在有一个指向该字符串的变量之后,情况发生了变化: 因此,一旦变量保存了该值,它似乎就冻结了。确实,在和之后o, 的输出再次更改。 这是不相同的行

  • #include <stdio.h> int main(void) { char p1[] = "Sam"; char *p2 = "Bob"; printf("p1 is %s, p2 is %s\n", p1, p2); return 0; } 技巧 使用gdb调试程序时,可以用“set”命令改变字符串的值,以上面程序为例: (gdb) start Tem

  • 本文向大家介绍如何在Python中更改不可变字符串的ID?,包括了如何在Python中更改不可变字符串的ID?的使用技巧和注意事项,需要的朋友参考一下 Python中的字符串是不可变的,这意味着一旦创建了字符串,就无法更改它。创建字符串时,如果创建相同的字符串并将其分配给另一个变量,则它们都将指向相同的字符串/内存。例如, 字符串对象的这种重用在Python中称为Interning。相同的字符串具

  • 为什么Java字符串被认为是不可变的?我可以说之后将name值更改为

  • 我正在尝试获得一个类,它在中组合了list、set和map。我希望编写函数,如果对象只包含一个元素,则该函数应该返回 不幸的是它给了我错误的比较 说 更新2 总结一下,就我的理解,在Kotlin中显式地将variable与进行比较是不可能/不合理的。因为一旦你比较它,下一次你就必须再次用隐式地用类似这样的操作来比较它,而你无法避免这种情况。