当前位置: 首页 > 知识库问答 >
问题:

引用相同字符串对象的两个java变量不同步

何和惬
2023-03-14
SomeObject s1 = new SomeObject("first");
SomeObject s2 = s1;
s2.setText("second");
System.out.println(s1.getText()); // print second
System.out.println(s2.getText()); // print second as well

但是,这并不适用于String类。请参见下面的代码:

String s_1 = new String("first");
String s_2 = s_1;
s_2 = "second";
System.out.println("s_1: " + s_1 + " s_2:  " + s_2); 
//s_1 appears to be "first" and s_2 "second"

这是因为字符串类和自声明类之间的差异吗?谢谢你的帮助!

共有1个答案

杭柏
2023-03-14

不,区别在于你所做的改变。

以下代码:

s2.setText("second")

不更改s2s1的值。S1S2都引用了与以前相同的对象...但是对象的内容已经改变。

s_2 = "second";
 类似资料:
  • 我的问题是,它似乎影响和删除相同的元素从原来的列表!

  • 为什么下面的和对象不同,当尝试在字符串池中创建时,它检查内容已经有相同的内容,所以引用字符串池中的对象。但我的假设是错误的,那么任何人都会纠正我。

  • 问题内容: 我有两个字符串,它们看起来都一样: 但是,检查相等性表明它们不是。 我还尝试从命令提示符中复制两个字符串,并将它们作为新变量粘贴回去,但是它们仍然不相等。我有80%的把握是因为它们的编码方式很怪异,插入了一些我看不见的奇数字符,但是使用type()都只是显示为字符串。 有什么办法可以看到“真实”字符串?任何帮助表示赞赏。 问题答案: 他们是不一样的; using显示了这两个值之间的差异

  • 输出如下:http://imgur.com/a/nu3n6

  • 问题内容: 为什么以下语句返回? 我也尝试过在字符串周围使用单引号。我唯一可以评估的方法是使用运算符,而不是 我的猜测是PHP将它视为某种方程式,但似乎有些奇怪。 有人可以详细说明吗? 问题答案: 是float数字格式,因此它们在比较时将转换为数字。 并且都将是因为它们太小。 对于在php中, 如果将数字与字符串进行比较,或者比较涉及 数字字符串 ,则每个字符串将转换为 数字 ,然后以数字方式进行

  • 我一直在试图解决这个面试问题,它要求洗牌字符串,以便没有两个相邻的字母是相同的,例如, ABCC->ACBC 我想到的方法是 1)遍历输入字符串并将(字母、频率)对存储在某个集合中 2)现在通过拉取频率最高(即>0)的字母来构建一个结果字符串 3)每当我们拉一封信时,更新(减少)频率 4)如果所有字母的频率为零,则返回结果字符串 5)如果只剩下一个频率大于1的字母,则返回错误 我假设是Unicod