【Practical Java】實踐1:引數以by value方式而非by reference方式傳遞

pengfoo發表於2012-08-29

一個普遍存在的誤解是:java 中的引數以by reference 方式傳遞。這不是真的,引數其實是以by value 方式傳遞。這個誤解源於[所有java objects 都是objects references]事實(關於object references 的詳細資訊,請見實踐8)。如果你未能準確理解其中奧妙,則可能導致一些料想不到的後果。舉個例子:

package fp;

import java.awt.Point;

public class Test
{
	public static void modifyPoint(Point pt,int j)
	{
		pt.setLocation(5, 5);//1
		
		j = 15;
		
		System.out.println("During modifyPoint "+"pt ="+pt+"and j ="+j);
	}
	
	public static void main(String args[])
	{
		Point p = new Point(0,0);//2
		
		int i = 10;
		
		System.out.println("Before modifyPoint "+"p ="+p+"and i ="+i);
		
		modifyPoint(p,i);//3
		
		System.out.println("Before modifyPoint "+"p ="+p+"and i ="+i);
	}
}


程式的輸出:

Before modifyPoint p =java.awt.Point[x=0,y=0]and i =10
During modifyPoint pt =java.awt.Point[x=5,y=5]and j =15
Before modifyPoint p =java.awt.Point[x=5,y=5]and i =10

感悟:p類似於c中的指標。

相關文章