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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java传递实例_Java方法的参数传递机制实例详解

發布時間:2024/9/27 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java传递实例_Java方法的参数传递机制实例详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了Java方法的參數傳遞機制。分享給大家供大家參考,具體如下:

參數傳遞機制

對于程序設計語言來說,一般方法(函數)的參數傳遞有兩種:按值傳遞和按引用傳遞。

按值傳遞意味著當將一個參數傳遞給一個方法時,方法接收的是原始值的一個副本。因此,如果方法修改了該參數,僅改變副本,而原始值保持不變。按引用傳遞意味著當將一個參數傳遞給一個方法時,方法接收的是原始值的內存地址,而不是值的副本。因此,如果方法修改了該參數,調用代碼中的原始值也隨之改變。

需要注意的是,方法可以修改按引用傳遞的參數對應的變量值,但不可以修改按值傳遞的參數對應的變量值,這是兩者的最大區別。

Java中的參數傳遞

Java中的參數傳遞機制只有一種,就是值傳遞。在Java中并沒有C++的引用傳遞這種參數傳遞機制,它所有的參數傳遞都遵循值傳遞的機制。

Java中對于對象(數組,類,接口)的傳遞似乎有點像引用傳遞,可以改變對象中某個屬性的值。但是不要被這個假象所蒙蔽,實際上這個傳入方法的值是對象引用的拷貝,即傳遞的是引用的地址值,所以還是按值傳遞。

基本類型的參數傳遞

在方法調用時,傳遞的參數是按值的拷貝傳遞;

public class Test {

public static void main(String[] args) {

Test t = new Test();

int a = 5;

t.method(a); // 傳遞后,method方法對變量值的改變不影響這里的a

System.out.println("method調用完后的a: " + a);

}

private void method(int a){

System.out.println("method中重新賦值之前的a: " + a);

a = 10;

System.out.println("method中重新賦值之后的a: " + a);

}

}

執行結果如下:

method中重新賦值之前的a: 5

method中重新賦值之后的a: 10

method調用完后的a: 5

由此可知按值傳遞重要特點:傳遞的是值的拷貝,也就是說傳遞后就互不相關了。下面看一下內存分析:

引用類型的參數傳遞

在方法調用時,傳遞的參數按引用進行傳遞,其實傳遞的引用的地址,也就是變量所對應的內存空間的地址。

public class Test {

public static void main(String[] args) {

Person person = new Person();

person.age = 18;

// 把main方法中的變量person所引用的內存空間地址,按引用傳遞給method方法中的person變量

// 請注意:這兩個person變量是完全不同的,不要被名稱相同所蒙蔽

method(person);

System.out.println("調用method方法之后:" + person.age);

}

public static void method(Person person){

person.age = 20;

System.out.println("method方法內第一次修改:" + person.age);

person = new Person(); // 新創建一個對象

person.age = 25;

System.out.println("method方法內第二次修改:" + person.age);

}

}

class Person {

public int age;

}

執行結果如下:

method方法內第一次修改:20

method方法內第二次修改:25

調用method方法之后:20

這里傳遞的是值的引用,也就是說傳遞前和傳遞后都指向同一個引用(也就是同一個內存空間)。

下面我們接著看一個例子:

public class Test {

public static void main(String[] args) {

int[] a = {5, 10};

method(a);

System.out.println("調用完method方法之后:" + a[0]);

}

public static void method(int[] a){

System.out.println("method內修改a[0]之前:" + a[0]);

a[0] = 50;

System.out.println("method內修改a[0]之后:" + a[0]);

}

}

執行結果如下:

method內修改a[0]之前:5

method內修改a[0]之后:50

調用完method方法之后:50

根據結果可知,調用method方法時實際傳遞的是引用的地址值。

傳遞String類型的參數

由于String類是final修飾的,不可變,它會在內存中在開辟一塊新空間。

public class Test {

public static void main(String[] args) {

String str1 = new String("test1");

String str2 = "test2";

method(str1, str2);

System.out.println("調用method傳參str1之后:" + str1 + ", " + str2);

}

public static void method(String str1, String str2){

System.out.println("method內修改str之前:" + str1 + ", " + str2);

str1 = "new1";

str2 = "new2";

System.out.println("method內修改str之后:" + str1 + ", " + str2);

}

}

執行結果如下:

method內修改str之前:test1, test2

method內修改str之后:new1, new2

調用method傳參str1之后:test1, test2

總結:

1)基本數據類型傳遞的是值的復制,對一個參數的修改不會影響另一個參數;

2)引用類型傳引用,形參和實參指向同一個內存地址(同一個對象),所以對參數的修改會影響到實際的對象;

3)String、Integer、Double等immutable的類型特殊處理,可以理解為傳值,最后的操作不會修改實參對象(與基本數據類型一致)。

希望本文所述對大家java程序設計有所幫助。

總結

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

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