Java參數(shù)的類型有哪些

這篇文章主要介紹了Java參數(shù)的類型有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

在網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報(bào)的無錫營銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)十余年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

簡述

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

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

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

基本類型參數(shù)

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

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)中的兩個(gè)數(shù)的值并內(nèi)有發(fā)生變化。這就是值傳遞的結(jié)果。

引用類型參數(shù)

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

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

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

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

Java參數(shù)的類型有哪些

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

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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java參數(shù)的類型有哪些”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

當(dāng)前標(biāo)題:Java參數(shù)的類型有哪些
網(wǎng)站網(wǎng)址:http://muchs.cn/article8/jpeeop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站、服務(wù)器托管定制網(wǎng)站、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司