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

java通過實(shí)例了解值傳遞和引用傳遞

 更新時(shí)間:2019年11月05日 09:33:04   作者:陳晨辰  
這篇文章主要介紹了java通過實(shí)例了解值傳遞和引用傳遞,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了java通過實(shí)例了解值傳遞和引用傳遞,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一.java中的值傳遞的問題

指的是在方法調(diào)用時(shí),傳遞的參數(shù)是按值的拷貝傳遞。示例如下:

public static void main(String[] args) {
	int a=1;
	change(a);
	System.out.println("交換a后的值:"+a);
}
private static void change(int a) {
	a=1111;
	System.out.println("交換方法里面的a:"+a);
}
//運(yùn)行輸出
//交換方法里面的a:1111
//交換a后的值:1

按值傳遞重要特點(diǎn):傳遞的是值的拷貝,也就是說傳遞后就互不相關(guān)了。

二.java中的引用傳遞的問題

指的是在方法調(diào)用時(shí),傳遞的參數(shù)是按引用進(jìn)行傳遞,其實(shí)傳遞的引用的地址,也就是變量所對應(yīng)的內(nèi)存空間的地址。示例如下:

public static void main(String[] args) {
	Person p=new Person();
	p.setAge(25);
	changeAge(p);
	System.out.println("改變年齡后的年齡:"+p.getAge());
}
private static void changeAge(Person p) {
	p.setAge(35);
	System.out.println("改變年齡方法里面的年齡:"+p.getAge());
}
//運(yùn)行輸出
//改變年齡方法里面的年齡:35
//改變年齡后的年齡:35
class Person{
	private int age=10;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

傳遞的是值的引用,也就是說傳遞前和傳遞后都指向同一個(gè)引用(也就是同一個(gè)內(nèi)存空間),引用類型的傳遞后的修改會(huì)影響原來的值。

從上面兩個(gè)例子來看,基本數(shù)據(jù)類型的傳遞是值傳遞,傳遞過去的是具體的數(shù)值;而引用數(shù)據(jù)類型的傳遞是引用傳遞,傳遞過去的是內(nèi)存的地址。其實(shí)不然,請看下面的兩個(gè)例子。

三.到底是值傳遞還是引用傳遞

請看下面一個(gè)例子,String類型也算是引用數(shù)據(jù)類型,把上面第一個(gè)值傳遞的里面的整形換成字符串類型,例子代碼如下:

public static void main(String[] args) {
	String str="哈哈我是字符串";
	change(str);
	System.out.println("交換字符串后的值:"+str);
}
private static void change(String str) {
	str="我在里面被交換了";
	System.out.println("交換方法里面的字符串:"+str);
}
//交換方法里面的字符串:我在里面被交換了
//交換字符串后的值:哈哈我是字符串

交換以后,引用類型的傳遞str并沒有改變,嘗試使用String s=new String("xxx");嘗試還是沒有改變.如果說String類比較特殊,請看下面的例子。

public static void main(String[] args) {
	Person p=new Person();
	p.setAge(25);
	changeAge(p);
	System.out.println("改變年齡后的年齡:"+p.getAge());
}
private static void changeAge(Person p) {
	p=new Person();
	p.setAge(35);
	System.out.println("改變年齡方法里面的年齡:"+p.getAge());
}
//運(yùn)行輸出
//改變年齡方法里面的年齡:35
//改變年齡后的年齡:25

我們在方法里面重新改變person對象的指向,這時(shí)如果是引用傳遞,必然會(huì)導(dǎo)致p對象里面的age發(fā)生改變,但是實(shí)際上并未改變。這里確實(shí)是按照引用傳遞的,但是傳遞的還是引用的一個(gè)副本,并不是原始的引用本身。在 Java 應(yīng)用程序中,當(dāng)對象引用是傳遞給方法的一個(gè)參數(shù)時(shí),您傳遞的是該引用的一個(gè)副本(可以認(rèn)為特殊的值傳遞),而不是引用本身。

四.總結(jié)

在java里面,一般不可變的對象 例于String 和8大基本數(shù)據(jù)類型的這些,都是值的傳遞,其他引用數(shù)據(jù)類型的傳遞是引用副本的傳遞。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

    Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Springboot事件和bean生命周期執(zhí)行機(jī)制實(shí)例詳解

    Springboot事件和bean生命周期執(zhí)行機(jī)制實(shí)例詳解

    這篇文章主要介紹了Springboot事件和bean的生命周期執(zhí)行機(jī)制,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Spring?Boot?整合?FreeMarker?實(shí)例分享

    Spring?Boot?整合?FreeMarker?實(shí)例分享

    這篇文章主要分享了Spring?Boot整合FreeMarker?實(shí)例FreeMarker是一款模板引擎,即一種基于模板和要改變的數(shù)據(jù),并用來生成輸出文本,更多相關(guān)介紹需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • Springboot開發(fā)OAuth2認(rèn)證授權(quán)與資源服務(wù)器操作

    Springboot開發(fā)OAuth2認(rèn)證授權(quán)與資源服務(wù)器操作

    這篇文章主要介紹了Springboot開發(fā)OAuth2認(rèn)證授權(quán)與資源服務(wù)器操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 一文詳解Java如何優(yōu)雅地判斷對象是否為空

    一文詳解Java如何優(yōu)雅地判斷對象是否為空

    這篇文章主要給大家介紹了關(guān)于Java如何優(yōu)雅地判斷對象是否為空的相關(guān)資料,在Java中可以使用以下方法優(yōu)雅地判斷一個(gè)對象是否為空,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介紹了SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Java?死鎖解決方案順序鎖和輪詢鎖

    Java?死鎖解決方案順序鎖和輪詢鎖

    這篇文章主要介紹了Java?死鎖解決方案順序鎖和輪詢鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 詳細(xì)分析java 動(dòng)態(tài)代理

    詳細(xì)分析java 動(dòng)態(tài)代理

    這篇文章主要介紹了java 動(dòng)態(tài)代理的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java之策略模式比較器案例講解

    Java之策略模式比較器案例講解

    這篇文章主要介紹了Java之策略模式比較器案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java對世界不同時(shí)區(qū)timezone之間時(shí)間轉(zhuǎn)換的處理方法

    Java對世界不同時(shí)區(qū)timezone之間時(shí)間轉(zhuǎn)換的處理方法

    這篇文章主要介紹了Java對世界不同時(shí)區(qū)timezone之間時(shí)間轉(zhuǎn)換的處理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

玛沁县| 桂林市| 九江市| 吉木萨尔县| 潼关县| 林周县| 日照市| 陇南市| 鄂州市| 衢州市| 贡嘎县| 林甸县| 嘉鱼县| 化隆| 阳信县| 类乌齐县| 车致| 黑龙江省| 梁平县| 平泉县| 明星| 滦平县| 华亭县| 江源县| 抚顺县| 成武县| 娄烦县| 和林格尔县| 尼木县| 澜沧| 乐平市| 夏河县| 彩票| 平舆县| 尼勒克县| 庆城县| 洛扎县| 永新县| 峨眉山市| 宿松县| 淄博市|