java編程 為什么說java里面只有值傳遞?
為什么說java里面只有值傳遞?關(guān)于這個問題,不同人對它的理解不盡相同。對初學(xué)Java的同學(xué)來說,可能簡單的認(rèn)為Java中參數(shù)傳遞就是分為值傳遞和引用傳遞,至于為什么,因為課本上就是這么說的。對于有些
為什么說java里面只有值傳遞?
關(guān)于這個問題,不同人對它的理解不盡相同。對初學(xué)Java的同學(xué)來說,可能簡單的認(rèn)為Java中參數(shù)傳遞就是分為值傳遞和引用傳遞,至于為什么,因為課本上就是這么說的。對于有些工作年限的程序員來說,可能認(rèn)為如果傳遞的參數(shù)類型是普通類型,那么就是值傳遞,如果參數(shù)是對象,那么就是引用傳遞。還有一些人認(rèn)為Java中只有值傳遞,就是題主問題中的主題。
對Java編程語言來說,前兩種理解是錯誤的,Java中只有值傳遞。對于我來說,剛開始也是理解有值傳遞和引用傳遞一說的,但是隨著自己寫代碼的積累,慢慢發(fā)現(xiàn)并不是那么回事。那為什么只有值傳遞呢?
首先,來了解一下什么是值傳遞,什么是引用傳遞?
值傳遞是說在調(diào)用函數(shù)時,將實際參數(shù)值復(fù)制一份傳遞到被調(diào)用函數(shù)中,在被調(diào)函數(shù)中修改參數(shù)值不會影響原實參值。
引用傳遞是說在調(diào)用函數(shù)時,將實際參數(shù)的地址直接傳遞到被調(diào)用的函數(shù)中,在被調(diào)函數(shù)中修改參數(shù)值會影響原實參值。
如果傳遞的參數(shù)類型是普通基本類型,那么一定是復(fù)制一份實參值傳遞給形參的,但是當(dāng)參數(shù)類型是對象的時候,也是復(fù)制的一份參數(shù)值傳遞給形參,只不過復(fù)制的是對象引用的地址,也就是在內(nèi)存中分配的存儲地址,不是直接傳遞的引用地址。
此時,可能有人會說那為什么將一個對象傳到另一個方法中,在這個方法中修改了這個對象的屬性值時,原調(diào)用方法中的對象屬性值也跟著變了,它不就是引用傳遞嗎?
其實,這是一個很容易迷惑的點。你仔細(xì)看看上面的陳述就會發(fā)現(xiàn),不是這么回事。將一個對象傳到另一個方法中,傳遞的是什么?傳遞的是對象引用的地址,這個對象引用的地址在另一個方法中被修改了嗎?原對象引用有受影響嗎?并沒有吧!
所以,Java中并沒有引用傳遞,只有值傳遞,不要再搞錯了!
我是『Java實戰(zhàn)技術(shù)』,關(guān)注我獲取更多原理分析、實戰(zhàn)技術(shù)!
Java是學(xué)些什么內(nèi)容的,容易學(xué)嗎?
將學(xué)習(xí)過程分為3個階段分別解釋一下:
1,首先要學(xué)習(xí)Java基礎(chǔ),數(shù)據(jù)類型、基本語法、常用數(shù)據(jù)結(jié)構(gòu)和類,網(wǎng)上資源很多。
2,然后結(jié)合工作內(nèi)容,學(xué)習(xí)常用框架,比如Web開發(fā)常用Spring Boot,注意框架學(xué)習(xí)時要挑選當(dāng)前的Top3,已經(jīng)過時的或者太新還看不清楚未來的,都不太適合新手學(xué)習(xí)。
3,隨著學(xué)習(xí)進階,逐步可以獨當(dāng)一面,在工作中積累項目經(jīng)驗、提高技術(shù)水平,現(xiàn)在技術(shù)發(fā)展迭代很快,終身學(xué)習(xí)。
java怎么樣構(gòu)造函數(shù)復(fù)制一個對象?
一、用Object 本身的復(fù)制對象的方法, clone()。對象可克隆的類必須實現(xiàn)Cloneable接口,并且clone方法是淺克隆。二、類實現(xiàn)Serializable,用ObjectOutputStream、ObjectInputStream 來復(fù)制對象。對象克隆有點復(fù)雜,尤其是第一種。關(guān)于這個問題你可以搜索:JAVA深復(fù)制(深克隆)與淺復(fù)制(淺克隆) 這篇文章看看。