簡體   English   中英

Java-復制變量的值而不是引用它

[英]Java - copying a variable's value instead of referencing it

我知道這是一個基本的Java問題,但我從未見過完整的解決方案。 基本上,我想將另一個變量的值復制到另一個變量中,然后讓新創建的變量保留該值。

這是我的代碼:

private void someMethod() {

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

}

在這里, tmpCommand的值將更改為modelItem.getName()值,因為它引用了commandName 但是,如果我希望tmpCommandcommandName值更改時不更改值怎么辦? 我必須創建一個新的對象tmpCommand嗎?

在這里,如果tmpCommand的值將更改為modelItem.getName()值,因為它引用了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()方法時,也可以使用該方法。 但基本的想法是,有時您希望兩個變量保存對獨立對象的引用。

您的代碼將按原樣運行,因為一旦為commandName分配了modelItem.getName() ,它就不再與tmpCommand引用同一對象。 也就是說,字符串是不可變的,因此無論如何您都無法更改這些對象的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM