<b>對象的建立</b>
在使用new 建立了一個對象,也就意味此對象永遠擁有Class類中的全部屬性,除了Static 類型的資料,因為Static 資料是公用的,即使不建立對象也可以使用,這就是我們為什麼使用對象來調用Static方法的時候會出現黃線的原因。曾今我常常次困惑
在使用new 建立了一個對象時,會涉及到的資料結構,棧,堆,方法區
在對象比較的時候基本資料類可以使用 == 來比較,因為基本資料類型不會建立對象,所有的基本資料類型的值放在棧中,如果基本資料類型的值相等,就傳回true
一般對象比較也使用 == 方法來比較,這種計較方式叫做對象位址比較,但是往往傳回的結果是false 這是因為對象的引用位址不一樣,很多書上常常這樣說 String 類型調用 equals方法是比較的值,特别說明(值 ,的概念)值,僅僅資料前面的基本資料類型,equals 方法是在Object 方法中定義的,但是在String類将Object的equals方法覆寫了,隻不過在String類中将,String 對象的比較形式變化了、在自定義覆寫equals 方法的使用切記一定要覆寫 hashCode 方法,因為在使用HashSet集合添加元素的時候,對象的比較形式是,先比較hashCode值,如果不覆寫,按照常理來說,基本上每一個對象都不會相等,還有System.lang包中得 indentityHashCode()方法也可以取得的對象的hashCode 值,該方法預設調用的也是hashCode方法,不管hashCode方法是否被覆寫。
在java 中可以這麼說,出了基本資料類型,一切皆對象,是以在調用equals 方法還是對象比較,而不是值比較,
其實在對象的比較上一共有兩種比較方式,第一種是上面說的對象比較,第二種是hashCode值比較,在java中取得的hashCode值,其實也就是棧記憶體中得位址,其實也是十六進制數字,在調用String 中equals 方法時,往往會比較兩次,第一次比較的是hashCode值,如果hashCode值不相則對象一定不會相等,如果hashCode值相等,則會在調用一次equals 方法來比較兩個對象的屬性是否相等,如果不相等則還是傳回false ,如果相等就傳回true
屬性通路
如果想要通路類中的方法,有兩種方法來通路,第一種使用建立的對象來通路方法,第二種類中得方法是Static 修飾,則不需要對象就可以調用,通過類點方法名稱,當然通過對象來調用Static 方法也是可以得,但是更本沒有這個必要,而且編輯器,還有做出莫名的警号資訊,對象通路就僅僅隻有這樣兩種