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

如果字符串对象被扣留,那么为什么一个中的更改不会影响其他[重复]

昌琪
2023-03-14

如果字符串对象被驻留,那么为什么一个对象的变化不会影响其他对象

public class EqualExample {
public static void main(String[] args) {

    String str = new String("Hello");
    String str1 = new String("Hello");

    System.out.println(str == str1);
    System.out.println(str1.equals(str));

}

}

上述程序的输出将是

假真

    public class EqualExample {
    public static void main(String[] args) {

    String str = "Hello";
    String str1 = "Hello";

    System.out.println(str == str1);
    System.out.println(str1.equals(str));

}

}

以上代码的输出为

真的

这是因为在字符串池中Heloo alredy存在,所以它将字符串插入并引用同一个对象,那么为什么如果我将str1更改为“Heloo java”,那么为什么str仍然有值“Heloo”。因为它们引用相同的对象,所以str的值必须是change public class equalSample{public static void main(String[]args){

    String str = "Hello";
    String str1 = "Hello";

    System.out.println(str == str1);
    System.out.println(str1.equals(str));

    str1="Heloo java";
    System.out.println(str+str1);
    System.out.println(str == str1);
    System.out.println(str1.equals(str));

}

}

输出true HelooHeloo java false false

共有3个答案

索寒
2023-03-14

不能更改现有的String。字符串是不可变的。当你说'改变str1"heloo java"'时,你实际上是在给一个不同的不可变对象分配一个引用。

单修德
2023-03-14

内存中有两个指针指向同一个地址。更改一个值意味着重定向一个指针,而另一个指针保持不变。

夏侯衡
2023-03-14

str1不是一个String。它是对String对象的引用。通过做

str1 = "Heloo java";

你没有修改字符串对象,你只是把参考点指向另一个不同的字符串对象。

之前:

str --------> "Hello"
                ^
str1 -----------|

之后:

str --------> "Hello"

str1 -------> "Heloo Java"

更改对象将包括执行以下操作:

str1.setCharacters("Heloo Java");

但是这样的方法并不存在,因为Strings是不可变的。因此,他们的角色不能被修改(除非使用肮脏的反射技巧)。

 类似资料:
  • 问题内容: 我有一个嵌套的字典,我们称它为字典d。该词典的键是一个整数,每个键的值是另一个词典。我正在python 2.7上尝试一个简单的代码来更新一个外键的值,但似乎它正在更新外键的ALL的值。 希望这些代码将使其更易于理解。这是我的意见。 然后是输出: 您会看到,我只为d [0] [‘mean’]分配了‘1’,但是d [1] [‘mean’]也有所更新。如果我增加d键的数量,它将只更改所有d键

  • 这是我在班级游戏板。在这节课中,我尝试制作一个GameTree来返回这个棋盘上所有可能的下一步动作的列表。当这部分代码运行时,它会影响游戏板,因为它包含了这段代码,导致所有的移动实际上都是在游戏板上进行的,在游戏板上,我只是尝试用一个移动来返回板。下面是Gameboard中的代码: 我不明白为什么这不是简单地创建一个新的游戏板对象,播放有效的移动,并将其添加到列表。相反,在这个for循环结束时,游

  • 我试图评估比较两个字符串是否会随着它们的长度增加而变慢。我的计算表明比较字符串应该需要一个摊销常数时间,但我的Python实验产生了奇怪的结果: 下面是字符串长度(1到400)与时间(毫秒)的关系图。自动垃圾收集已禁用,并且gc。在每次迭代之间运行collect。 我每次比较100万随机字符串,计算匹配如下。这个过程重复50次,然后取所有测量时间的最小值。 什么可能解释长度64左右突然增加? 注意

  • 问题内容: 我试图了解变量如何在python中工作。说我有一个对象存储在变量中: 如果我分配给,则它们都指向同一个对象: 但是,如果我重新分配或,那就不再正确了: 这两个变量现在具有不同的值: 我不明白为什么变量现在不同。为什么不再是真的?有人可以解释发生了什么吗? 问题答案: Python具有引用 对象的 名称 。对象与名称分开存在,名称与它们引用的对象分开存在。 __ 在为“名称分配名称”时,

  • 问题内容: 我们通常使用关键字创建对象,例如: 字符串是对象,但是我们不能用来创建它们: 为什么是这样?我可以用做一个琴弦吗? 问题答案: 除了已经说过的内容外,Java中的字符串文字(即像Java 一样但不喜欢的字符串)是经过内插的-这意味着,每次引用时,你都将引用一个String实例,而不是一个新实例。每一次。因此,你将拥有: 但是如果你有 那么就有可能 (如果有人需要提醒,请务必使用比较字符

  • 考虑下面的代码。 我理解在这里工作的等号操作符,因为我们隐式地转换为对象,等号操作符正在检查两者的引用是否相等并返回false。 但我对第二个问题感到困惑,返回true看起来像是调用字符串类型提供的Equals override实现,如果它们相等,它会检查字符串的内容。 我的问题是,为什么它也不检查运算符的内容平等性,它们的实际类型是string而不是object。正当 而下面的代码为两者输出tu