亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java引用類型的參數(shù)也是值傳遞

 更新時間:2019年03月23日 09:35:21   作者:碼途有約  
這篇文章主要介紹了Java引用類型的參數(shù)也是值傳遞,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡述

調用方法的時候,有需要傳參數(shù)的情況。在Java中,參數(shù)的類型有基本類型和引用類型兩種。

一開始聽到一個說法,Java沒有引用傳遞,但是一直沒有太多的思考在上面,直到前不久玩數(shù)組的時候,突然間發(fā)現(xiàn)把數(shù)組引用變量作為參數(shù)傳遞到一個方法當中進行操作之后,再去訪問原數(shù)組,盡然改變了。于是乎,就想到了之前在C++里面學過的引用傳遞,突然有一種錯愕的感覺,就查了一些資料,探究當Java引用類型變量作為參數(shù)傳遞給方法的時候,到底是值傳遞還是引用傳遞。

結論:如果將Java引用類型變量作為參數(shù)傳遞給方法,是將引用變量的值傳遞給形參,而引用變量的值實際上就是引用對象在堆內存中的地址。也就是說,這個時候實參和形參指向了同一個對象,如果利用形參進行操作,操作的就是實參指向的對象,最后通過實參的那個引用訪問,自然是被形參操作過的結果。

基本類型參數(shù)

基本類型參數(shù)是典型的值傳遞,著名的案例就是更換兩個數(shù)的值。下面是這個問題的示例代碼:

public class Main {
	public static void main(String[] args) {
		int num1 = 11;
		int num2 = 22;
		System.out.println("Before the call: num1 is " + num1 + " and num2 is " + num2);
		swap(num1, num2);
		System.out.println("After the call: num1 is " + num1 + " and num2 is " + num2);
	}
	
	public static void swap(int num1, int num2) {
		System.out.println("num1 is " + num1 + " and num2 is " + num2 + " in method of swap.(before)");
		int tmp = num1;
		num1 = num2;
		num2 = tmp;
		System.out.println("num1 is " + num1 + " and num2 is " + num2 + " in method of swap.(after)");
	}
}

運行結果如下

Before the call: num1 is 11 and num2 is 22
num1 is 11 and num2 is 22 in method of swap.(before)
num1 is 22 and num2 is 11 in method of swap.(after)
After the call: num1 is 11 and num2 is 22

 

通過運行結果,可以清楚地知道,通過這樣的參數(shù)傳遞,交換的僅僅是形參的值,而main方法當中的兩個數(shù)的值并內有發(fā)生變化。這就是值傳遞的結果。

引用類型參數(shù)

通過一個數(shù)組引用演示引用類型參數(shù)的傳遞效果

public class ArrayTest {
	public static void main(String[] args) {
		int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
		System.out.print("Before calling the inversion: ");
		for (int i : arr) {
			System.out.printf("%3d", i);
		}
		System.out.println();
		inversion(arr);
		System.out.print(" After calling the inversion: ");
		for (int i : arr) {
			System.out.printf("%3d", i);
		}
		System.out.println();
		
		setNull(arr);
		System.out.println("@" + arr);
	}
	public static void inversion(int[] arr) {
		int length = arr.length;
		for (int i = 0; i <= length / 2; i++) {
			int temp = arr[i];
			arr[i] = arr[length - i - 1];
			arr[length - i -1] = temp;
		}
	}
	
	public static void setNull(int[] array) {
		System.out.println("#" + array);
		array = null;
		System.out.println("$" + array);
	}
}

程序運行結果:

Before calling the inversion:   0  1  2  3  4  5  6  7  8  9
   After calling the inversion:   9  8  7  6  4  5  3  2  1  0
#[I@1d251891
$null
@[I@1d251891 

程序中,在main方法中定義了一個數(shù)組,并且在類中定義了一個將數(shù)組元素倒置的方法inversion(),這個方法需要傳入一個數(shù)組類型的引用。在main方法中調用這個方法,并將arr這個數(shù)組的引用作為參數(shù)傳遞給inversion方法,通過程序執(zhí)行的結果,可以看到當inversion方法執(zhí)行完畢,main方法中的arr數(shù)組的內容的確發(fā)生了倒置。

那么,這個時候是否就可以認為,引用類型的傳遞是引用傳遞而并非值傳遞呢?按照資料顯示的,引用類型的參數(shù)傳遞傳遞的是引用變量的值,有什么方法可以證明一下呢?setNull()方法提供了這樣的證明。

setNull方法的參數(shù)是數(shù)組的引用變量,程序中傳入的是arr.進入方法,首先打印了array,然后將它置空再打印一次,然后在main方法中,打印arr的地址。程序運行的結果表示,array置空之前和arr指向的是同一區(qū)域,而后array=null卻并沒有影響到arr.

所以,可以肯定,當一個引用類型的變量被作為參數(shù)傳遞到方法中的時候,僅僅是將變量值復制后傳遞過去,而本身沒有發(fā)生改變去指向其他。

當array=null的時候,array指向堆區(qū)的引用失效了。

以上的示例和分析都表明,Java中的確沒有引用傳遞,當把一個引用類型的變量作為參數(shù)傳遞給方法的時候,也僅僅是將引用變量的值復制一份給了方法中的參數(shù),自己始終指向原本的對象。

以上所述是小編給大家介紹的Java引用類型的參數(shù)也是值傳遞詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • java ArrayBlockingQueue的方法及缺點分析

    java ArrayBlockingQueue的方法及缺點分析

    在本篇內容里小編給大家整理的是一篇關于java ArrayBlockingQueue的方法及缺點分析,對此有興趣的朋友們可以跟著學習下。
    2021-01-01
  • SpringBoot開啟Swagger并配置基本信息方式

    SpringBoot開啟Swagger并配置基本信息方式

    這篇文章主要介紹了SpringBoot開啟Swagger并配置基本信息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot多種環(huán)境自由切換的實現(xiàn)

    SpringBoot多種環(huán)境自由切換的實現(xiàn)

    本文主要介紹了SpringBoot多種環(huán)境自由切換的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Springboot actuator生產就緒功能實現(xiàn)解析

    Springboot actuator生產就緒功能實現(xiàn)解析

    這篇文章主要介紹了Springboot actuator生產就緒功能實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 詳解Java中finally和return的執(zhí)行順序

    詳解Java中finally和return的執(zhí)行順序

    try-catch-finally是一種針對程序運行時出錯的響應手段,對于一些可以預料到的出錯類型,在發(fā)生時對其進行報告和補救,這篇文章主要介紹了Java中finally和return的執(zhí)行順序,需要的朋友可以參考下
    2024-01-01
  • eclipse項目在IDEA中打開并運行的詳細圖文教程

    eclipse項目在IDEA中打開并運行的詳細圖文教程

    這篇文章主要給大家介紹了關于eclipse項目在IDEA中打開并運行的詳細圖文教程,至從使用IDEA開發(fā)工具以來,不少次有使用IDEA運行Eclipse項目或非Maven項目,所以這里給大家總結下,需要的朋友可以參考下
    2023-09-09
  • 一文帶你搞懂Java定時器Timer的使用

    一文帶你搞懂Java定時器Timer的使用

    定時器類似于我們生活中的鬧鐘,可以設定一個時間來提醒我們。而定時器是指定一個時間去執(zhí)行一個任務,讓程序去代替人工準時操作。本文就來聊聊Java定時器Timer的使用,需要的可以參考一下
    2023-01-01
  • Spring實戰(zhàn)之緩存使用condition操作示例

    Spring實戰(zhàn)之緩存使用condition操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之緩存使用condition操作,結合實例形式分析了Spring緩存使用condition具體配置、屬性、領域模型等相關操作技巧與注意事項,需要的朋友可以參考下
    2020-01-01
  • Spring MVC學習之DispatcherServlet請求處理詳析

    Spring MVC學習之DispatcherServlet請求處理詳析

    這篇文章主要給大家介紹了關于Spring MVC學習教程之DispatcherServlet請求處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2018-11-11
  • Spring的BeanFactoryPostProcessor接口示例代碼詳解

    Spring的BeanFactoryPostProcessor接口示例代碼詳解

    這篇文章主要介紹了Spring的BeanFactoryPostProcessor接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論