1.對象做爲函數的參數傳遞過去的時候,是以原對象的引用的方式傳遞的,更改參數對象的值,會影響原來的對象。 2.對象做爲函數的返回值的時候,傳遞過來的也是一個引用傳遞,更改傳遞過來的對象的時候,會影響原來的對象 3.對象A給另外一個對象B賦值的時候(不管B是否通過了new 開闢新空間),此時的B是對A對象的一個引用,更改B會影響A 4.惟一的不是引用傳遞的方式是: 使用 基本數據類型賦值的方式,來對對象進行拷貝好比上例中的最後一種方式。這樣出現的對象是一個新對象,不是原始對象的引用 補充: 1. java中的String類型雖然也爲一個對象,可是在賦值傳遞的時候,走的是值傳遞的路線,和通常數據類型是一樣的。String爲一個特例。 總結: 對象的傳遞過程當中, 基本上都是以引用傳遞來進行的,惟一的非引用傳遞的方法是: 本身開闢新的對象空間後,使用基本數據類型賦值方法(也能夠本身實現一個copy複製函數)。java
附上測試代碼和結果:函數
String str = new String("abc");
char[] ch = {'a','b','c'};
Log.d("levin", str+"\n");
Log.d("levin", String.valueOf(ch));
change(str,ch);
System.out.print("\n");
Log.d("levin", str+"\n");
Log.d("levin", String.valueOf(ch));
Person person = new Person();
person.name = "bill";
person.age = 10;
changePerson(person);
Log.d("levin", person.name+"\n");
Log.d("levin", String.valueOf(person.age));
public void changePerson(Person person){
person.name = "Jobs";
person.age = 50;
}
06-07 12:33:57.178: D/levin(8091): abc 06-07 12:33:57.578: D/levin(8091): abc 06-07 12:33:58.548: D/levin(8091): abc 06-07 12:33:58.988: D/levin(8091): gbc 06-07 12:34:00.158: D/levin(8091): Jobs 06-07 12:34:00.418: D/levin(8091): 50測試