不可變類是指當建立了這個類的實例後,就不容許修改它的值的類,也就是一個對象一旦被建立出來,在其整個生命週期中,它的成員變量就不能被修改了,只容許其餘程序進行讀操做,而不容許其餘程序進行修改操做。java
在java類庫中,全部基本類型的包裝類都是不可變類,如Integer、Float等。此外,String也是不可變類。this
在java中,除了8種原始數據類型外,其餘的類型都是對象,在方法調用的時候,傳遞的都是引用。從本質上講,引用也是按值傳遞,只不過傳遞的這個值是對象的引用而已,所以,在方法調用的時候,對形參引用所指對象屬性值的修改對實參可見。可是,對引用值自己的修改對實參是不可見的。spa
舉個簡單引用傳遞的例子:code
public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static void main(String args[]) { int n = 0; Person person = new Person(28, "zhansan"); System.out.println("person1:" + person); person.Uname(person); person.Pname(person); person.cname(n); System.out.println("main:" + n); } public void Uname(Person person) { person.age = 8; person.name = "L"; System.out.println("person2:" + person); } public void Pname(Person person) { person.age = 7; System.out.println("person3:" + person); } public void cname(int n) { n = n + 2; System.out.println("cname:" + n); } }
輸出結果:對象
由輸出結果能夠看出,對象的地址爲同一個,因此指向的是同一個對象;blog
而值傳遞,改變的只是形參副本。生命週期