簡體   English   中英

交換功能:Java按值傳遞密碼失敗

[英]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.

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