java 方法 参数 引用_Java 基础
本質(zhì)上,只有值傳遞這一種傳遞方式,所謂的引用傳遞是值傳遞的一種。即:1
2
3
4
5
6// 將2這個值復(fù)制一份傳遞給m
int a = 2;
m(a);
// 將引用o復(fù)制一份并將其值傳遞給m
m(o);
值傳遞的核心就在于”復(fù)制”。傳遞的并不是原始數(shù)據(jù),而是復(fù)制出的,與原始數(shù)據(jù)相等的東西。因此方法對這個克隆體所做的一切操作都不會影響原始數(shù)據(jù)。
雖然理論基礎(chǔ)是統(tǒng)一的,但是當(dāng)傳遞的是引用時,可能會讓人產(chǎn)生一些迷茫。這也是為什么很多人將引用傳遞從值傳遞中提出來單獨(dú)論述的原因。例如:1
2O o = new O();
m(o);
執(zhí)行m(o)時,會復(fù)制出一份引用o的副本o_c并將其傳遞給m。自此o與o_c就是兩個完全獨(dú)立的個體,不會再有任何瓜葛。但是問題在于,初始時,因為o_c是o的副本,因此其空間中存放的對象地址必然與o相同。進(jìn)而,如果m中有如下操作:1o = new O();
此舉相當(dāng)于將o_c中存放的對象地址指向了一個新的對象。而由于o與o_c已完全獨(dú)立,因此并不會導(dǎo)致o中存放的對象地址發(fā)生變化。
但是,如果我們在m中做如下操作:1o.setName("八云紫");
此時o_c并沒有修改其內(nèi)部存放的對象地址,而是直接操作了該對象中的數(shù)據(jù)。對此o中存放的對象地址依然沒有發(fā)生變化,但由于其所存放的對象本身被o_c的操作所修改,看起來仿佛是傳遞進(jìn)方法的引用影響了原始引用一樣。但是即便如此,o_c也沒有真正修改o中存儲的值。
舉一個生活中的小例子:小王手中有一個神秘網(wǎng)站的網(wǎng)址,從這個網(wǎng)站可以下載神奇的影片。本質(zhì)上,小王所擁有的并非網(wǎng)站本身,而僅僅是網(wǎng)址這個字符串。小劉抄到了這個網(wǎng)址,那么無論小劉做什么事,對小王所擁有的那個字符串都不會造成影響。注意:這里所說的不會被影響的事物是小王的”網(wǎng)址字符串”。若小劉僅僅只是修改他拿到的網(wǎng)址為另一個網(wǎng)址,那么對小王完全沒影響。如果小劉因為沒錢充會員導(dǎo)致無法下載神奇的影片而一怒之下黑進(jìn)了這個網(wǎng)站并將其中的影片全部換成了金剛葫蘆娃,那么小王也無法在這個網(wǎng)站下載神奇的影片了。此時,小李所改變的是網(wǎng)站本身,并不是小王所持有的網(wǎng)址字符串。
總結(jié)
以上是生活随笔為你收集整理的java 方法 参数 引用_Java 基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 表结构关系_mysql 表关
- 下一篇: mvp架构 java_GitHub -