什么是值傳遞和引用傳遞 java值傳遞和引用傳遞有什么區(qū)別?
java值傳遞和引用傳遞有什么區(qū)別?兩者的區(qū)別在于Java值傳輸需要為傳輸?shù)闹捣峙漕~外的存儲空間,而引用傳輸則不需要。它只傳輸所傳輸值的地址,變量可以直接將值讀取到地址指示的存儲空間。從這個意義上講,
java值傳遞和引用傳遞有什么區(qū)別?
兩者的區(qū)別在于Java值傳輸需要為傳輸?shù)闹捣峙漕~外的存儲空間,而引用傳輸則不需要。它只傳輸所傳輸值的地址,變量可以直接將值讀取到地址指示的存儲空間。
從這個意義上講,引用傳遞比傳遞節(jié)省更多的存儲空間。
賦值是值傳遞還是引用傳遞?
值類型和引用類型:一種是存儲在堆棧上的內(nèi)容是堆棧中的對象,另一種是存儲在堆中的內(nèi)容是堆中的對象。值類型存儲在堆棧中,可以直接訪問。引用類型需要在堆中顯式分配,不能直接訪問。它需要在堆棧中分配一個對象來指向堆中的對象。參數(shù)傳遞有兩種:值傳遞和引用傳遞。通常,當ref和out沒有顯式指示時,它是值傳遞。值傳遞:傳遞對象的值拷貝。(也就是說,函數(shù)中的參數(shù)對象是堆棧中對象的副本,在調(diào)用時傳遞給對象。)引用傳遞:傳遞堆棧中對象的地址。(也就是說,函數(shù)中的參數(shù)對象和調(diào)用中傳遞的對象都是同一堆棧中的對象。)此標簽1。文本=此標簽2. text這是屬性text的值。(目標)此標簽1沒有意義此標簽2)A1=A2這是A1指向A2的對象,如果更改為A1。消息=A2。消息;答案將與第一個相同
C#值類型數(shù)據(jù)直接將數(shù)據(jù)存儲在自己分配的內(nèi)存中,而C#引用類型僅包含指向存儲數(shù)據(jù)位置的指針?;緮?shù)據(jù)類型(字符串類型除外):包括整數(shù)、浮點、十進制和布爾。整數(shù)類型包括:sbyte、byte、char、short、USHORT、int、uint、long、ulong,浮點類型包括float和double,decimal類型為decimal,boolean類型為bool。結(jié)構(gòu)類型:結(jié)構(gòu)類型。枚舉類型:枚舉類型。有五種引用類型:類、接口、委托、對象和字符串。當引用類型用作參數(shù)時,其結(jié)果類似于修改變量本身時傳遞的值,即在傳遞之前不會更改變量的值。2修改變量的屬性或字段時,是引用傳遞,傳遞前會影響變量的值
3。參數(shù)僅在使用ref時通過引用傳遞。無論是修改變量本身,還是修改變量的屬性或字段,都會影響變量傳遞前的值傳遞:傳遞對象的值副本。(也就是說,函數(shù)中的參數(shù)對象是調(diào)用期間傳遞的堆棧中對象的副本。)引用傳遞:傳遞堆棧中對象的地址。(也就是說,函數(shù)中的參數(shù)對象和調(diào)用期間傳遞的對象都是同一堆棧中的對象。)在Java中:1。當基本類型和基本類型變量作為參數(shù)傳遞給方法時,它們是值。在方法實體中,不能重新分配原始變量或更改其值。2當對象和引用變量作為參數(shù)傳遞給方法時,它們是通過引用傳遞的。在方法實體中,不能重新分配原始變量,但可以更改它所指向的對象的屬性。和C#一樣,但是Java中沒有ref和out這樣的關(guān)鍵字
你學過C或C嗎?這兩個概念繼承自C/C,類似于C中的值傳遞和指針傳遞。在Java中,除了基本類型的對象(integer/float/double等)和string類外,所有類對象引用都是通過引用傳遞的,即傳遞的對象地址。所謂的傳遞值是傳遞值的副本,而不是原始值。例如,publicstaticvoidmain(string[]args){int a=10int B=20int C=add(a,B)系統(tǒng)輸出打?。ā癮=”a“,B=”B“,C=”C)}私有靜態(tài)int add(int a,int B){a=20b=30return a,B}輸出:a=10,B=20,C=這就是所謂的值傳遞。更改被調(diào)用方法中的參數(shù)值不會影響在調(diào)用方法中定義的變量的值。如果將a和B定義為student類的對象,然后在add方法中改變參數(shù)中的值,那么調(diào)用方法main中的a和B變量就會改變,這就是所謂的引用傳遞
關(guān)于這個問題,不同的人有不同的理解。對于Java初學者來說,他們可能認為Java中的參數(shù)傳遞分為值傳遞和引用傳遞。至于為什么,教科書上說了。對于程序員的某些工作年限,他們可能會認為,如果傳遞的參數(shù)類型是普通類型,則傳遞的是值;如果參數(shù)是對象,則傳遞的是引用。另一些人認為,只有Java中的值傳遞才是主要問題的主題。
對于Java編程語言,前兩種理解是錯誤的。Java中只使用值傳遞。對我來說,一開始,我也理解了價值傳遞和參照傳遞的理論,但隨著自己代碼的積累,我逐漸發(fā)現(xiàn)事實并非如此。那么為什么只有價值傳遞呢?
首先,讓我們了解什么是值傳遞,什么是引用傳遞?
值傳輸意味著調(diào)用函數(shù)時,實際參數(shù)值被復制并傳遞給被調(diào)用函數(shù)。修改被調(diào)用函數(shù)中的參數(shù)值不會影響原始參數(shù)值。
引用傳遞意味著調(diào)用函數(shù)時,實際參數(shù)的地址直接傳遞給被調(diào)用函數(shù)。修改被調(diào)用函數(shù)中的參數(shù)值將影響原始參數(shù)值。
如果傳遞的參數(shù)類型是普通基本類型,則必須復制實際參數(shù)值并將其傳遞給形式參數(shù)。但是,當參數(shù)類型是對象時,它也是復制的參數(shù)值,并將其傳遞給形式參數(shù)。只復制對象的引用地址,即內(nèi)存中分配的存儲地址,而不是直接傳遞的引用地址。
此時,有些人可能會問為什么一個對象會被傳遞給另一個方法。在此方法中修改對象的屬性值時,原始調(diào)用方法中對象的屬性值將更改。這不就是參考傳遞嗎?
事實上,這是一個非常令人困惑的問題。如果你仔細看看上面的說法,事實并非如此。將一個對象傳遞給另一個方法會傳遞什么?傳遞對象引用的地址。對象引用的地址是否已在其他方法中修改?原始對象引用是否受影響?不
!因此,Java中沒有引用傳遞,只有值傳遞。不要犯任何錯誤!