public class demo
}
執行結果:
system.identityhashcode()方法列印的是變數內容指向的位址
此時對於str1來說,有兩個位址,其自身在棧中儲存的位址和內容指向的位址(string池中串的位址)
str2與str1儲存的內容在編譯時期就被確認為指向同一string串(string池中的串)
此時對於str3來說,有兩個位址,其自身在棧中儲存的位址和內容指向的位址(堆中匿名物件的位址)
對於堆中new string()來說,有兩個位址,其自身在堆中儲存的位址(即str3內容指向的位址)和內容指向的位址(string池中串的位址)
判斷的是內容的位址
即對於str1和str2來說,比較的是兩者內容指向的同一位址
即對於str1和str3來說,比較的是兩者內容指向的不同位址(string池中的位址和堆中匿名物件的位址)
判斷的是內容本身
對於str1,str2,str3來說,比較的都是最終指向的string池中字串的具體內容(string類重寫過equals方法)
//string的equals方法
public boolean equals(object anobject)
if (anobject instanceof string)
return true;
}} return false;
}
Java記憶體分配及equals和 號的詳細講解
從圖中我們可以很清晰的看出,程式通重載入器從硬碟中載入到記憶體中,並且儲存到不同的位置,通俗的說就是new出來的東西存放在heap 堆區 區域性變數存放在stack 棧區 靜態變數和字串常量存放在data segment 資料段 中,邏輯 存放在code segment 段 中 通過下面的 來解釋變...
重寫和過載的詳細解析
指的是在同乙個類中,存在多個名稱相同的方法,但是這些方法的引數個數,引數型別,或者引數順序不同。在滿足前面三個條件任意其中乙個的情況下,方法的返回型別和訪問修飾符可以不同。注意 僅僅只是方法的返回型別不同不能構成過載!public class test 引數個數1,引數型別int public vo...
ostream iterator詳細解析
ostream iterator屬於i o流stl介面卡,用於獲取乙個元素,同時儲存在緩衝器中,可以供cout輸出。如果把cout看做成乙個物件,那麼在cout物件當中存在一片用於資料儲存的區域。ostream iterator在stl中一般配合copy函式一起使用,如下 ostream itera...