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