equals:
int t1=1;
int t2=2;
person p1=new person();
person p2=new person();
t1==t2 //true
p1==p2 //false
p1.equals(p2) //true
此處重點說明string和integer物件
string記憶體位置說明
string物件
string a2 = new string(「holtenobj」);
string b2 = new string(「holtenobj」);
class被載入時就在常量池中建立了乙個值為holtenobj的string物件,第一句執行時會在堆裡建立new string(「holtenobj」)物件;
第二句執行時,因為常量池中存在holtenobj所以就不再建立新的string物件了,直接在堆裡建立new string(「holtenobj」)物件。
此時:
a1==b1 //true 常量池值不變
a2==b2 //false 比較棧記憶體位址
a1.equals(b1) //true 比較string物件值
a2.equals(b2) //true 比較new string()物件在堆記憶體中的值
integer:
在interger類中,為了初始化方便,提供-128-127之間的數建立物件時直接建立在常量池中,其他物件會建立堆記憶體中
integer t1=
newinteger(1);
integer t2=
newinteger(1);
integer t3=
newinteger(128);
integer t4=
newinteger(128);
integer c =
3;
integer d =
3;c==d //true jvm底層在常量池建立乙個integer物件
c.equals(d) //true 值相等
t1==t2 //true
t1.equals(t2) //true
t3==t4 //false 位址不一致
t3.equals(t4) //true 堆記憶體中物件值相等
int i=
2017:
integer j=
2017;
i==j //true
i.equals(j) //true 實際物件值相等
共同點:
都不能建立例項化物件,且可包含抽象方法
不同點:
第一:從介面和類的角度
類中可以有靜態方法和普通方法的實現,靜態變數和普通變數,構造器和普通**塊,而介面都沒有介面可以支援實現多個介面,類不能多繼承。
第二:從設計思想的角度
介面體現一種規範,系統的總覽,規定了實現者向外提供的服務,規定了呼叫者可以呼叫的方法和如何訪問該方法
抽象類體現一種模板式設計,即多個子類呼叫同乙個父類,可以作為系統實現過程中的中間產品,這個產品已經實現了部分功能,但是又有部分功能沒有實現,即這個產品不是最終產品。
JAVA學習筆記之一(物件入門)
1 上溯造型 upcasting 把衍生型別當作他的基礎型別處理的過程 基礎型別shape有方法draw,erase等方法,circle,line,等型別是shape的衍生型別,函式dostuff對基礎型別物件做如下處理 void dostuff shape s s.draw s.erase 這個函...
ruby之一物件比較
ruby物件的比較有三種方式 1 比較兩個物件的值是否相等,返回 true,flase 等於 不等於 a 1 b 1.0 a b true2 比較兩個物件的值 型別是否相等,返回 true,flase eql?a 1 b 1.0 a.eql?b flase a為整數型,b為浮點型 3 比較兩個物件在...
一 物件模型
在ruby程式中,物件僅僅是其大世界的乙個公民而已,除了物件還有其他語言構件,比如類 class 模組 module 以及例項變數 imstance variable 等,元程式設計操控的就是這些語言構件。所有語言構件存在於其中的系統稱為物件模型,它是ruby的靈魂。1 物件由一組例項變數和乙個類的...