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

java中的可变和不可变字符串有什么区别

锺离高丽
2023-03-14
问题内容

据我所知,

可变字符串可以更改,而不变字符串则不能更改。

在这里我想这样改变String的值,

String str="Good";
str=str+" Morning";

而另一种方式是

StringBuffer str= new StringBuffer("Good");
str.append(" Morning");

在这两种情况下,我都试图更改的值str。谁能告诉我,这两种情况有什么区别,让我清楚地了解可变和不可变的对象。


问题答案:

情况1:

String str = "Good";
str = str + " Morning";

在上面的代码中,您将创建3个String对象。

  1. “好”它将进入 字符串池
  2. “早晨”也进入 字符串池
  3. 通过合并“ Good”和“ Morning”创建的“ Good Morning”。这个家伙在 堆上

注意: 字符串 始终是不可变的 。没有 可变的String之 类的东西。str仅仅是一个 参考 ,最终指向“早安”。您实际上
不是 在处理1对象。您有3不同的String对象。

情况2:

StringBuffer str = new StringBuffer("Good"); 
str.append(" Morning");

StringBuffer包含字符数组。这是
一样的String。上面的代码将字符添加到现有数组。实际上,StringBuffer是可变的,其String表示不是。



 类似资料:
  • 据我所知, 可变字符串可以更改,不可变字符串不能更改。 这里我想这样改变字符串的值, 另一种方法是, 在这两种情况下,我都试图改变str的值。谁能告诉我,这两种情况的区别是什么,让我清楚地了解可变和不可变对象。

  • 问题内容: 他们为什么决定使用 Java和.NET(和其他一些语言)使其不可变?他们为什么不使它可变? 问题答案: 根据Effective Java第四章第73页第2版: “这样做有很多充分的理由:不可变的类比可变的类更易于设计,实现和使用。它们不易出错且更安全。 […] “ 不可变对象很简单。不可变对象可以恰好处于一种状态,即创建时的状态。如果确保所有构造函数都建立类不变式,则可以保证这些不变式

  • 本文向大家介绍Java中的不可变字符串,包括了Java中的不可变字符串的使用技巧和注意事项,需要的朋友参考一下 在Java中,不可变对象是指那些不能更改或修改(一旦修改)数据的对象。字符串类是不可变的,即一旦我们创建了一个字符串对象,就无法修改其数据。

  • 本文向大家介绍为什么字符串对象在Java中是不可变的?,包括了为什么字符串对象在Java中是不可变的?的使用技巧和注意事项,需要的朋友参考一下 通常,字符串用于表示重要细节,例如数据库连接URL,用户名密码等。字符串的不变性有助于使这些细节保持不变。 类似地,在加载类时,将String用作参数。那时,更改字符串可能会导致加载错误的类。 如果不可变,则变量(字符串)自动为线程安全的。

  • 问题内容: 我们都知道这String在Java 中是不可变的,但是请检查以下代码: 为什么该程序会这样运行?为何值和改变了,但没有改变? 问题答案: 是不可变的*,但这仅意味着你无法使用其公共API对其进行更改。 你在这里所做的是使用反射来绕过常规API。同样,你可以更改枚举的值,更改整数自动装箱中使用的查找表等。 现在,原因s1和s2变化值是它们都引用相同的实习字符串。编译器执行此操作(如其他答