6 4 7 不可變類

2021-06-29 14:58:52 字數 1619 閱讀 6716

1.使用private和final修飾符來修飾該類的成員變數

2.提供帶引數構造器,用於提供傳入引數來初始化類裡的成員變數

3.僅為該類的成員變數提供getter方法

4.重寫object類的hashcode()和equals()方法。

package chap6_4;

class immutablestringtest

}

執行結果

false

true

69609650

69609650

package chap6_4;

public

class

address

public

address(string detail,string postcode)

public string getdetail()

public string getpostcode()

public

boolean

equals(object obj)

if(obj!=null&&obj.getclass()==address.class)

}return

false;

}public

inthashcode()

}

與不可變類對應的是可變類,可變類的含義是該類的例項變數是可變的。

package chap6_4;

class name

public

name(string firstname,string lastname)

public string getfirstname()

public

void

setfirstname(string firstname)

public string getlastname()

public

void

setlastname(string lastname)

}public

class person

public name getname()

public

static

void

main(string args)

}

執行結果

悟空

八戒

public

class person

public name getname()

public

static

void

main(string args)

}

該構造器建立的person物件時並不是直接利已有的name物件(利用已有的name物件有風險,因為這個已有的name物件是可變的,如果程式改變了這個name物件,將會導致person物件也發生變化。

如果需要設計乙個不可變類,尤其要注意其引用型別的成員變數。

執行結果

悟空

悟空

可變和不可變 類的私有屬性

items print id list print id list 但記憶體位址沒有變id 函式獲取記憶體位址。a jack print id a b jack print id b b記憶體位址和上面a一樣 a zhangsan print id a a記憶體位址變了 c zhangsan pri...

可變與不可變

元組 tuple 元組一旦被建立就不能被修改,採用逗號和圓括號 來表示。列表推導式 可變與不可變 序列型別 是否有序 是否可變 列表有序可變 元組有序 不可變 字串有序 不可變 字典無序可變 集合無序 不可變不管是可變還是不可變的序列型別 1 分片必定產生新的序列 2 號在等號右邊,必定產生新的序列...

可變和不可變

可變和不可變 不可變 物件所指向的記憶體中的值是不可以改變 不可變型別 int ser float 元組tuple num 10s1 abc print id s1 s1 abcd print id s1 t1 2 5,6 print id t1 t1 2 5 print id t1 可變的 物件所...