這個問題在這里已經有了答案: 如何讓 Java 賦值指向一個物件而不是復制? (5 個回答) 如何在 Java 中使用指標? (14 個回答) 7 小時前關閉。
這是我的代碼:
public static void main(String args[]) {
Integer a = 1;
Integer b = a;
a = 2;
System.out.println("b: " b); //print 1
}
我想在這里列印 2,我該怎么辦?
uj5u.com熱心網友回復:
在你之后重新分配變數。像這樣將“a”重新分配為兩個:
public static void main(String args[]) {
Integer a = 1;
Integer b = a;
a = 2;
b = a;
System.out.println("b: " b); //now it prints 2
}
你是對的 khelwood!
解釋:變數是記憶體中用來存盤值的一個單位。一旦你給一個變數賦值,它就不能改變其他變數,因為計算機不能這樣做,因為它們不知道該做什么,只能遵循程式的指令(比如一旦你向一個專案添加更多專案只有一個盒子和另一個盒子得到與你在現實生活中添加到第一個盒子相同的東西,而你不知道在另一個盒子里裝什么沒有意義)。
uj5u.com熱心網友回復:
該Integer級實際上是不變的,所以每次修改它的時候,你實際上是創建一個新類。這意味著您的變數a結束指向與b.
但是,Java 提供了一個執行緒安全的可變整數類,稱為AtomicInteger. 使用此類,您實際上可以修改它包含的值,而無需創建新物件。
import java.util.concurrent.atomic.AtomicInteger;
...
public static void main(String[ ] args) {
AtomicInteger a = new AtomicInteger(1);
AtomicInteger b = a;
a.set(2);
System.out.println("b: " b);
}
要了解有關該課程的更多資訊,請查看本指南。
但是,如果您只是真的想列印2并且不想使用指標和參考,您可能只想記住,您a在將其分配給后所做的任何更改b都不會反映在b. 因此更改代碼中的執行順序:
public static void main(String args[]) {
Integer a = 1;
a = 2;
Integer b = a;
System.out.println("b: " b);
}
uj5u.com熱心網友回復:
您的代碼不起作用的原因是,每次您為 賦值時,Java 都會創建一個新的 Integer 物件a。這是 Java 的自動裝箱功能。
例如,如果你說:
public class Autobox {
public static void main(String[] args) {
Integer a = 1;
Integer b = a;
a = 2;
System.out.println(a.hashCode());
System.out.println(b.hashCode());
}
}
輸出是:
2
1
換句話說,您會得到兩個完全不同的哈希碼(哈希碼是一種唯一的物件 ID 參考)a,b這實際上意味著它們是不同的物件。Java 編譯器a在遇到該行時為變數創建了一個新的整數a=2。
uj5u.com熱心網友回復:
一旦你想賦值,就必須有順序。如果您確實想將 a 的值分配給 b 然后在復制之前分配它
public static void main(String args[]) {
Integer a = 2;
Integer b = a;
System.out.println("b: " b);
}
uj5u.com熱心網友回復:
您可以創建變數的 setter 和 getter
public class MyStuff{
private String myvar1;
private String myvar2;
public void Setmyvar1(newval){
myvar1 = newval
myvar2 = newval
}
..... the same with Setmyvar2(newval)
}
我希望這個對你有用!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/380695.html
下一篇:://想使用您當前的位置
