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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

你真的了解引用传递与值传递吗?

發布時間:2024/10/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你真的了解引用传递与值传递吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1.方法參數的兩種類型
    • 2.方法參數的規則
    • 3.代碼驗證
      • 3.1一個方法不能修改一個基本數據類型的參數
      • 3.2一個方法可以改變一個對象參數的狀態
      • 3.3一個方法不能讓對象引用一個新的對象
    • 4.一個案例進一步理解方法調用

本文已同步到:https://www.bithachi.cn/posts/255ba281.html

1.方法參數的兩種類型

  • 形參是基本數據類型:將實參基本數據類型變量的“數據值”傳遞給形參
  • 形參是引用數據類型:將實參引用數據類型變量的“地址值”傳遞給形參

嚴格點說其實只有一種:值傳遞。 即將實際參數(基本數據類型或引用數據類型)值的副本傳入方法內,而參數本身不受影響。

2.方法參數的規則

  • 一個方法不能修改一個基本數據類型的參數(byte,short,int,long,float,double,char,boolean)
  • 一個方法可以改變一個對象參數的狀態
  • 一個方法不能讓對象引用一個新的對象

3.代碼驗證

3.1一個方法不能修改一個基本數據類型的參數


說明:

調用tripleValue這個方法之 后,percent 的值還是 10。
下面看一下具體的執行 過程:

  • 1 ) x 被初始化為 percent 值的一個拷貝(也就 是 10 )
  • 2 ) x 被乘以 3后等于 30。 但是 percent 仍然 是 10
  • 3 ) 這個方法結束之后,參數變量 X 不再使用。

3.2一個方法可以改變一個對象參數的狀態


說明:

具體的執行過程為:

  • 1 ) X 被初始化為 harry 值的拷貝,這里是一個對象的引用。
  • 2 ) raiseSalary 方法應用于這個對象引用。x 和 harry 同時引用的那個 Employee 對象的薪金提高了 200%。
  • 3 ) 方法結束后,參數變量 x 不再使用。
  • 當然,對象變量 harry 繼續引用那個薪金增至 3 倍的雇員對象

3.3一個方法不能讓對象引用一個新的對象


說明:

  • 方法并沒有改變存儲在變量 a 和 b 中的對象引用。
  • swap 方法的參數 x 和 y 被初始 化為兩個對象引用的拷貝,這個方法交換的是這兩個拷貝。
  • 在方法結束時局部變量變量 X 和 y 從棧區出棧,被丟棄了。原來的變量 a 和 b 仍然引用 這個方法調用之前所引用的對象

    這個過程說明:Java 程序設計語言對對象采用的不是引用調用,實際上, 對象引用是按值傳遞的。
    對象引用按值傳遞,即方法傳遞的是這兩個對象引用的值,可以理解為地址,就像基本數據類型一樣,我們不能改變著兩個引用值/地址,但是我們卻可以改變這兩個引用值指向的對應對象的狀態值

4.一個案例進一步理解方法調用

public class Test {public void second(Value v, int i) {i = 0;v.i = 20;Value val = new Value();v = val;System.out.println(v.i + " " + i);}public void first() {int i = 5;Value v = new Value();v.i = 25;second(v, i);System.out.println(v.i);}public static void main(String[] args) {Test test = new Test();test.first();}class Value {int i = 15;} }

總結

以上是生活随笔為你收集整理的你真的了解引用传递与值传递吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

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