日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java两种传参,有关java参数的两种传递机制

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java两种传参,有关java参数的两种传递机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,方法執行中形式參數值的改變不影響實際參 數的值。

引用傳遞:也稱為傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,方法執行中形式參數值的改變將會影響實際參數的值。

a.傳遞值的數據類型:八種基本數據類型和String(這樣理解可以,但是事實上String也是傳遞的地址,只是string對象和其他對象是不同的,string對象是不能被改變的,內容改變就會產生新對象。那么StringBuffer就可以了,但只是改變其內容。不能改變外部變量所指向的內存地址)。

b.傳遞地址值的數據類型:除String以外的所有復合數據類型,包括數組、類和接口。

值傳遞的例子:

package com.other.test;

public class Test {

public static void change(int i, int j) {

int temp = i;

i = j;

j = temp;

}

public static void main(String[] args) {

int a = 3;

int b = 4;

change(a, b);

System.out.println("a=" + a);

System.out.println("b=" + b);

}

}

輸出的結果是 a=3 b=4,?傳遞的值并不會改變原值

引用傳遞的例子:(數組)

package com.other.test;

public class Test {

public static void change(int[] counts) {

counts[0] = 6;

System.out.println(counts[0]);

}

public static void main(String[] args) {

int[] count = { 1, 2, 3, 4, 5 };

change(count);

System.out.println(count[0]);

}

}

輸出結果是6 6 也就是引用的值改變了原來的值 引用傳遞的例子:(對象)

定義一個A對象:

package com.other.test;

public class A {

int i = 0;

}

對上邊對象操作的類:

package com.other.test;

public class Test {

public static void add(A a) {

//a = new A(); ①

a.i++;

}

public static void main(String args[]) {

A a = new A();

add(a);

System.out.println(a.i );

}

}

當把①注解掉時,輸出的結果是1,當①沒有注解是是0,原因是 a =new A();構造了新的A對象就不是傳遞的那個對象了。 看看String的情況

package com.other.test;

public class Test {

String str = new String("old");

char[] ch = { 'a', 'b', 'c' };

public static void main(String args[]) {

Test ex = new Test();

ex.change(ex.str, ex.ch);

System.out.print(ex.str + " and ");

System.out.println(ex.ch);

}

public void change(String str, char ch[]) {

str = "new";

ch[0] = 'd';

}

}

輸出的結果的是 old and dbc也就是傳遞String并不會改變原值,而是創建了一個新值。 ch[]就是一個簡單的數組的傳遞。 ( 對象包括對象引用即地址和對象的內容) String 比較特別,看過String 代碼的都知道, String 是 final的。所以值是不變的。 函數中String對象引用的副本指向了另外一個新String對象,而數組對象引用的副本沒有改變,而是改變對象中數據的內容.?   對于對象類型,也就是Object的子類,如果你在方法中修改了它的成員的值,那個修改是生效的,方法調用結束后,它的成員是新的值,但是如果你把它指向一個其它的對象,方法調用結束后,原來對它的引用并沒用指向新的對象。?   Java參數,不管是原始類型還是引用類型,傳遞的都是副本(有另外一種說法是傳值,但是說傳副本更好理解吧,傳值通常是相對傳址而言)。?   如果參數類型是原始類型,那么傳過來的就是這個參數的一個副本,也就是這個原始參數的值,這個跟之前所談的傳值是一樣的。如果在函數中改變了副本的值不會改變原始的值.   如果參數類型是引用類型,那么傳過來的就是這個引用參數的副本,這個副本存放的是參數的地址。如果在函數中沒有改變這個副本的地址,而是改變了地址中的值,那么在函數內的改變會影響到傳入的參數。如果在函數中改變了副本的地址,如new一個,那么副本就指向了一個新的地址,此時傳入的參數還是指向原來的地址,所以不會改變參數的值。

有時候被世人所嫌棄的人,卻能做出讓人想象不到的大事? --艾倫圖靈

內容來源于網絡如有侵權請私信刪除

總結

以上是生活随笔為你收集整理的java两种传参,有关java参数的两种传递机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。