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 可變的 物件所...