最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡述

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

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

結(jié)論:如果將Java引用類型變量作為參數(shù)傳遞給方法,是將引用變量的值傳遞給形參,而引用變量的值實(shí)際上就是引用對象在堆內(nèi)存中的地址。也就是說,這個時候?qū)崊⒑托螀⒅赶蛄送粋€對象,如果利用形參進(jìn)行操作,操作的就是實(shí)參指向的對象,最后通過實(shí)參的那個引用訪問,自然是被形參操作過的結(jié)果。

基本類型參數(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)");
	}
}

運(yùn)行結(jié)果如下

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

 

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

引用類型參數(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);
	}
}

程序運(yùn)行結(jié)果:

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方法中調(diào)用這個方法,并將arr這個數(shù)組的引用作為參數(shù)傳遞給inversion方法,通過程序執(zhí)行的結(jié)果,可以看到當(dāng)inversion方法執(zhí)行完畢,main方法中的arr數(shù)組的內(nèi)容的確發(fā)生了倒置。

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

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

所以,可以肯定,當(dāng)一個引用類型的變量被作為參數(shù)傳遞到方法中的時候,僅僅是將變量值復(fù)制后傳遞過去,而本身沒有發(fā)生改變?nèi)ブ赶蚱渌?br />

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

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

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

相關(guān)文章

  • Java實(shí)戰(zhàn)之用Swing實(shí)現(xiàn)通訊錄管理系統(tǒng)

    Java實(shí)戰(zhàn)之用Swing實(shí)現(xiàn)通訊錄管理系統(tǒng)

    今天給大家?guī)淼氖荍ava實(shí)戰(zhàn)的相關(guān)知識,文章圍繞著Swing實(shí)現(xiàn)通訊錄管理系統(tǒng)展開,文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下
    2021-06-06
  • Springboot Tomcat APR模式詳解和實(shí)踐記錄

    Springboot Tomcat APR模式詳解和實(shí)踐記錄

    這篇文章主要介紹了Springboot Tomcat APR模式詳解和實(shí)踐記錄,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • javaSystem.out.println()輸出byte[]、char[]異常的問題詳析

    javaSystem.out.println()輸出byte[]、char[]異常的問題詳析

    這篇文章主要給大家介紹了關(guān)于javaSystem.out.println()輸出byte[]、char[]異常問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看啊
    2019-01-01
  • 初學(xué)者Android studio安裝圖文詳解

    初學(xué)者Android studio安裝圖文詳解

    本文給大家分享android studio 安裝圖文詳解包括下載安裝及遇到的問題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • SpringBoot環(huán)境下junit單元測試速度優(yōu)化方式

    SpringBoot環(huán)境下junit單元測試速度優(yōu)化方式

    這篇文章主要介紹了SpringBoot環(huán)境下junit單元測試速度優(yōu)化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于slf4j日志MDC輸出格式的問題

    基于slf4j日志MDC輸出格式的問題

    這篇文章主要介紹了基于slf4j日志MDC輸出格式的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 淺談SpringCloud的微服務(wù)架構(gòu)組件

    淺談SpringCloud的微服務(wù)架構(gòu)組件

    這篇文章主要介紹了淺談SpringCloud的微服務(wù)架構(gòu)組件,Spring Cloud根據(jù)分布式服務(wù)協(xié)調(diào)治理的需求成立了許多子項(xiàng)目,每個項(xiàng)目通過特定的組件去實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • 非常全面的Java異常處理(全文干貨,值得收藏)

    非常全面的Java異常處理(全文干貨,值得收藏)

    這篇文章主要給大家介紹了非常全面的Java異常處理的相關(guān)資料,全文干貨,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Spring?Retry重試框架的使用講解

    Spring?Retry重試框架的使用講解

    重試的使用場景比較多,比如調(diào)用遠(yuǎn)程服務(wù)時,由于網(wǎng)絡(luò)或者服務(wù)端響應(yīng)慢導(dǎo)致調(diào)用超時,此時可以多重試幾次。用定時任務(wù)也可以實(shí)現(xiàn)重試的效果,但比較麻煩,用Spring?Retry的話一個注解搞定所有,感興趣的可以了解一下
    2022-10-10
  • Java在長字符串中查找短字符串的實(shí)現(xiàn)多種方法

    Java在長字符串中查找短字符串的實(shí)現(xiàn)多種方法

    這篇文章主要介紹了Java在長字符串中查找短字符串的實(shí)現(xiàn)多種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

旬邑县| 汝南县| 浪卡子县| 阿坝县| 静乐县| 潮州市| 金沙县| 池州市| 积石山| 赣榆县| 井冈山市| 海兴县| 朝阳市| 方正县| 三门县| 定远县| 双鸭山市| 吉水县| 湾仔区| 航空| 鲜城| 策勒县| 延川县| 重庆市| 丹阳市| 达拉特旗| 西盟| 墨玉县| 扬州市| 佛冈县| 牡丹江市| 隆安县| 桐城市| 茂名市| 桐庐县| 永平县| 云林县| 南川市| 双鸭山市| 随州市| 文安县|