java只有按值傳遞:基本類型 值傳遞;引用類型,地址值傳遞,所以叫值傳遞。
基本類型:傳遞的是值的拷貝,也就是說傳遞后就互不相關了,也就是說,不過副函數的副本如何變化,主本永遠不會被影響。
引用類型:傳遞的是引用地址值,有可能會被影響。 (如下)
如果是對象的話,就是將引用的值復制一份給方法當參數。如果是根據引用把堆里的對象修改了,那么對象真被修改了,
不過不是被創建賦值給的那個引用修改的,是方法里的一個復制的引用副本給修改的。
String:具有不可變。是特殊的引用類型,其作用跟基本類型一樣,傳遞后不相關。
例:
public class StudySetAndGet { public static void main(String[] args) { Person person=new Person(); String bob="Bob"; person.setName(bob); System.out.println(bob.hashCode()); System.out.println(person.getName()); bob="Alice";
//String:具有不可變。是特殊的引用類型,其作用跟基本類型一樣,傳遞后不相關。 System.out.println(bob.hashCode()); System.out.println(person.getName()); String[] fullname=new String[]{"Homer","Simpson"}; person.setFullName(fullname); System.out.println(fullname.hashCode()); System.out.println(person.getFullName()); fullname[0]="Bart"; //傳入的是地址。所以改變內部的值,下面也會跟着改變(hashCode值不變) System.out.println(fullname.hashCode()); System.out.println(person.getFullName()); } } class Person{ private String name; private String[] fullName; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFullName() { return this.fullName[0]+" "+this.fullName[1]; } public void setFullName(String[] fullName) { this.fullName = fullName; } }