~~~~~~~~~~~~~~~~~~~~~~~~~~函數的調用~~~~~~~~~~~~~~~~~~~~
1> 在java中,傳參時,都是以傳值的形式驚行。
2> 對于基本數據類型,傳遞的是數據的拷貝,對于引用類型,傳遞的引用的拷貝。
3> 當我們在打印一個對象的時候,比如System.out.println(pt);,它會自動調用類的toString()方法
?? ,所以建議在所有的子類中重寫toString()方法。
我們寫一個函數用來交換兩個變量(x,y)的值.
?code:
class StringTest
{
?public static void change(int x, int y)
?{
??x=x+y;
??y=x-y;
??x=x-y;
?}
?/*
?public static void change(int[] num)
?{
??num[0]=num[0]+num[1];
??num[1]=num[0]-num[1];
??num[0]=num[0]-num[1];
?}
?public static void change(Point pt)
?{
??pt.x=pt.x+pt.y;
??pt.y=pt.x-pt.y;
??pt.x=pt.x-pt.y;
?}
?*/
?public static void main(String[] args)
?{
?int x=3;
?int y=4;
?change(3,4);
?System.out.println("x="+x+","+"y="+y);
?}
我們期望的輸出結果是 x=4,y=3 然后你運行后發現結果為x=3,y=4,并沒有達到我們的要求,為什么呢?那是因為對于基本數據類型,傳遞的是數據的拷貝,對于引用類型,傳遞的是引用(首地址)的拷貝。看看下面的內存圖解應該你就能看出來了.看看引用類型怎么來實現:

code:
class StringTest
{
?/*
?public static void change(int x, int y)
?{
??x=x+y;
??y=x-y;
??x=x-y;
?}
?*/
?public static void change(int[] num)
?{
??num[0]=num[0]+num[1];
??num[1]=num[0]-num[1];
??num[0]=num[0]-num[1];
?}
?public static void change(Point pt)
?{
??pt.x=pt.x+pt.y;
??pt.y=pt.x-pt.y;
??pt.x=pt.x-pt.y;
?}
?public static void main(String[] args)
?{
??/*
?? int x=3;
?? int y=4;
?? change(3,4);
?? System.out.println("x="+x+","+"y="+y);
?? */
?? int[] num=new int[]{3,4};
?? change(num);
?? System.out.println("x="+num[0]+","+"y="+num[1]);
??
?? Point pt=new Point();
?? pt.x=3;
?? pt.y=4;
?? change(pt);
?? System.out.println("x="+pt.x+","+"y="+pt.y);?
?}
class Point
{
?int x,y;?
}
再看看引用類型的內存變化圖:
以上說明了在Java中函數的調用:
a> 在Java中,傳參時,都是以傳值的方式進行。
b> 對于基本數據類型,傳遞的是數據的拷貝,對于引用類型,傳遞的是引用(首地址)的拷貝。
