java中隨機(jī)數(shù)怎么生成 為什么說(shuō)java里面只有值傳遞?
為什么說(shuō)java里面只有值傳遞?關(guān)于這個(gè)問(wèn)題,不同人對(duì)它的理解不盡相同。對(duì)初學(xué)Java的同學(xué)來(lái)說(shuō),可能簡(jiǎn)單的認(rèn)為Java中參數(shù)傳遞就是分為值傳遞和引用傳遞,至于為什么,因?yàn)檎n本上就是這么說(shuō)的。對(duì)于有些
為什么說(shuō)java里面只有值傳遞?
關(guān)于這個(gè)問(wèn)題,不同人對(duì)它的理解不盡相同。對(duì)初學(xué)Java的同學(xué)來(lái)說(shuō),可能簡(jiǎn)單的認(rèn)為Java中參數(shù)傳遞就是分為值傳遞和引用傳遞,至于為什么,因?yàn)檎n本上就是這么說(shuō)的。對(duì)于有些工作年限的程序員來(lái)說(shuō),可能認(rèn)為如果傳遞的參數(shù)類型是普通類型,那么就是值傳遞,如果參數(shù)是對(duì)象,那么就是引用傳遞。還有一些人認(rèn)為Java中只有值傳遞,就是題主問(wèn)題中的主題。
對(duì)Java編程語(yǔ)言來(lái)說(shuō),前兩種理解是錯(cuò)誤的,Java中只有值傳遞。對(duì)于我來(lái)說(shuō),剛開(kāi)始也是理解有值傳遞和引用傳遞一說(shuō)的,但是隨著自己寫代碼的積累,慢慢發(fā)現(xiàn)并不是那么回事。那為什么只有值傳遞呢?
首先,來(lái)了解一下什么是值傳遞,什么是引用傳遞?
值傳遞是說(shuō)在調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)值復(fù)制一份傳遞到被調(diào)用函數(shù)中,在被調(diào)函數(shù)中修改參數(shù)值不會(huì)影響原實(shí)參值。
引用傳遞是說(shuō)在調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)的地址直接傳遞到被調(diào)用的函數(shù)中,在被調(diào)函數(shù)中修改參數(shù)值會(huì)影響原實(shí)參值。
如果傳遞的參數(shù)類型是普通基本類型,那么一定是復(fù)制一份實(shí)參值傳遞給形參的,但是當(dāng)參數(shù)類型是對(duì)象的時(shí)候,也是復(fù)制的一份參數(shù)值傳遞給形參,只不過(guò)復(fù)制的是對(duì)象引用的地址,也就是在內(nèi)存中分配的存儲(chǔ)地址,不是直接傳遞的引用地址。
此時(shí),可能有人會(huì)說(shuō)那為什么將一個(gè)對(duì)象傳到另一個(gè)方法中,在這個(gè)方法中修改了這個(gè)對(duì)象的屬性值時(shí),原調(diào)用方法中的對(duì)象屬性值也跟著變了,它不就是引用傳遞嗎?
其實(shí),這是一個(gè)很容易迷惑的點(diǎn)。你仔細(xì)看看上面的陳述就會(huì)發(fā)現(xiàn),不是這么回事。將一個(gè)對(duì)象傳到另一個(gè)方法中,傳遞的是什么?傳遞的是對(duì)象引用的地址,這個(gè)對(duì)象引用的地址在另一個(gè)方法中被修改了嗎?原對(duì)象引用有受影響嗎?并沒(méi)有吧!
所以,Java中并沒(méi)有引用傳遞,只有值傳遞,不要再搞錯(cuò)了!
我是『Java實(shí)戰(zhàn)技術(shù)』,關(guān)注我獲取更多原理分析、實(shí)戰(zhàn)技術(shù)!
java引用類數(shù)組的問(wèn)題?
A a = new A()A 聲明數(shù)據(jù)類型是 大Aa (在棧中)這個(gè)就是引用實(shí)際上是一個(gè)受限指針(在java中是一種特殊的受限指針 通過(guò)這個(gè) 小a 能找到你所定義(定義會(huì)分配存儲(chǔ)空間)的那個(gè)數(shù)據(jù))new 關(guān)鍵字 作用是分配堆空間 A() 數(shù)據(jù)類型 大A 的構(gòu)造方法 new A() 使用A的默認(rèn)構(gòu)造方法 在堆上分配了一塊空間這個(gè)空間你不能直接訪問(wèn)你需要一個(gè)橋梁a=new A() 的意思是 把在堆上分配的這塊空間 的首地址賦值給a 換句話說(shuō)a指向堆上分配的那塊空間 小a就是那個(gè)橋梁但a只有首地址 他不知道它的數(shù)據(jù)類型(類) A a = new A()中的 A a 的意思是告訴編譯器小a是大A這種數(shù)據(jù)結(jié)構(gòu)的(類) A a = new A();的意思是 首先在堆分配一內(nèi)存(new)來(lái)存放 大A 這種數(shù)據(jù)結(jié)構(gòu)(類)然后聲明一個(gè) 大A類型的引用小a 之后把分配的這塊內(nèi)存的首地址 賦值給小a 能看明白的話 java語(yǔ)法方面就沒(méi)問(wèn)題了