Java值傳遞的終極解釋
對(duì)于Java的值傳遞, 你真的了解么? Java里面只有值傳遞, 這個(gè)值是什么? 如果是基本數(shù)據(jù)類型。 你也許回答的很干脆。 但如果是Object對(duì)象呢? 你確定清楚不? 先看下code。
Java代碼
- package com.basic;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- StringBuffer buffer= new StringBuffer("colin");
- SChange(buffer);
- System.out.println( buffer);
- }
- public static void SChange (StringBuffer str) {
- str= new StringBuffer("huang");
- }
- }
上面code, 輸出的結(jié)果是什么? 你對(duì)了嗎?
輸出的結(jié)果是 colin.
我們修改下code
Java代碼
- package com.basic;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- StringBuffer buffer= new StringBuffer("colin");
- SChange(buffer);
- System.out.println( buffer);
- }
- public static void SChange (StringBuffer str) {
- //str= new StringBuffer("huang");
- str.append(" huang");
- }
- }
輸出的結(jié)果是 colin huang.
為什么是這樣的結(jié)果呢? 下面詳細(xì)解釋:
Java確實(shí)通過引用來維護(hù)Object, 所有的Object變量, 都是一個(gè)引用。但Java在方法傳遞中, 確實(shí)是值傳遞。 那這個(gè)值是什么呢。 對(duì)于Object, 這個(gè)值就是傳人的Object的引用。既把這個(gè)引用copy了一份。 那么, 就至少有兩個(gè)引用指向了這同一個(gè)傳入的Object。 參考下圖:

那么, 我們就來圖解下上面的那兩個(gè)代碼。
下圖圖解代碼一

接著圖解代碼二

代碼一中, copy的那個(gè)引用, 指向了一個(gè)新的對(duì)象。 但原對(duì)象還是沒有變化的。
代碼二中, copy的那個(gè)引用, 把原對(duì)象改變了。
這就是Java的值傳遞。
原文地址:http://qqdwll.javaeye.com/blog/970001
【編輯推薦】