gpt4 book ai didi

Java - 复制变量的值而不是引用它

转载 作者:行者123 更新时间:2023-12-01 06:34:51 26 4
gpt4 key购买 nike

我知道这是一个基本的 Java 问题,但我从未见过该问题的完整解决方案。基本上,我想将另一个变量的值复制到另一个变量中,然后让新创建的变量保留该值。

这是我的代码:

private void someMethod() {

String tmpCommand = commandName;
commandName = modelItem.getName();

}

这里,tmpCommand 的值将更改为 modelItem.getName() 值,因为它引用 commandName。但是,如果我希望在 commandName 值更改时 tmpCommand 不更改值,该怎么办?我是否必须创建一个新对象tmpCommand

最佳答案

Here, if tmpCommand's value will change to modelItem.getName() value since it references commandName.

不,不会。 tmpCommand 的值只是赋值时commandName 的值。

这很容易演示:

String original = "foo";
String test = original;
original = "bar";
System.out.println(test); // Prints foo

请注意,更改 original 的值与更改 original 值所引用的对象内的数据不同。让我们用可变类型做一个不同的示例 - StringBuilder:

StringBuilder original = new StringBuilder("foo");
String test = original;
original.append("bar");
System.out.println(test); // Prints foobar

在这里,testoriginal 仍然具有相同的值:该值是对 StringBuilder引用> 对象。对 append 的调用根本不会更改该引用...它会更改该引用所引用的对象中的数据。区分变量、引用和对象确实非常重要。

因此,如果您想避免这种情况,您需要创建一个具有相同内容的新对象 - 某些类提供了一种方法;其他人则不然。例如,您可以使用:

StringBuilder original = new StringBuilder("foo");
String test = new StringBuilder(original);
original.append("bar");
System.out.println(test); // Prints foo

当提供clone()方法时,也可以使用它。但基本上的想法是,有时您希望两个变量保存对独立对象的引用。

关于Java - 复制变量的值而不是引用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com