[英]Swapping function : Java Pass-By-Value code failed
public void swap(Point var1, Point var2)
{
var1.x = 100;
var1.y = 100;
Point temp = var1;
var1 = var2;
var2 = temp;
}
public static void main(String [] args)
{
Point p1 = new Point(0,0);
Point p2 = new Point(0,0);
System.out.println("A: " + p1.x + " B: " +p1.y);
System.out.println("A: " + p2.x + " B: " +p2.y);
System.out.println(" ");
swap(p1,p2);
System.out.println("A: " + p1.x + " B:" + p1.y);
System.out.println("A: " + p2.x + " B: " +p2.y);
}
運行代碼將產生:
A: 0 B: 0
A: 0 B: 0
A: 100 B: 100
A: 0 B: 0
我了解該函數如何更改按值傳遞的p1的值。 我沒有得到的是為什么p1和p2交換失敗。
Java是由價值在任何時候通過。 這兩個基本類型和對象的唯一機制。
關鍵是要知道對象傳遞了什么。 這不是對象本身;而是對象本身。 生活在堆上。 它是對按值傳遞的對象的引用 。
您不能修改傳遞的引用並將新值返回給調用者,但是可以修改其引用的對象的狀態-如果該對象可變,並公開了適合您調用的方法。
類似於C的可能,帶有指針的類交換不起作用,因為您無法更改傳遞的引用所引用的內容,也無法將新值返回給調用者。
myFunction()
剛換到里面的函數的兩個對象(這是從外面那些不同)的引用,但不換的功能,也沒有對象實例本身之外的參考!
在正式參數位置將生成一個引用的副本,因此將有一個指向Point實例的新引用
對象是通過引用分配的,不是克隆的,但參數保留為對實際對象的引用,它們不會變成“對引用的引用”。
我的意思是, var1
最初引用的對象與p1
相同,但是隨后您將var1
更改為引用另一個對象。 這並不影響什么對象p1
引用,因為var1
不是一個參考p1
,只有同一個對象作為參考p1
被引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.