何為Java引用

2021-06-01 07:31:43 字數 1395 閱讀 3804

string str="aa";

str有本身的記憶體,是乙個變數,而對像"aa"也有它自己的記憶體空間.

這時候說str引用"aa"這個對像.

string tt=null;

這裡的tt也是乙個引用變數,但是它沒有引用具體的對像.

string str="aa";

string tt=str;

這裡str與tt都是乙個引用變數(屬於string型別的,只能引用string型別對像),記住:str它的記憶體空間裡的值是乙個位址值,tt的記憶體空間也是乙個位址值.

它們的值就是具體對像的首位址(首位址也就是記憶體位址)

str的值為ad12ee51乙個位址值

"aa"這兩個字元(也就是具體的對像)在記憶體裡分配空間的時候首位址也就是ad12ee51

jvm會知道它們是不是引用變數(相對於原始型別int ,long等變數),jvm知道乙個變數為原始變數的時候就會根據它們的值-->乙個位址值    再去訪問具體的記憶體空間,也就是訪問到具體的對像.因為tt=str;就是把str的值-->乙個位址值複製給tt,所以在執行 的時候jvm發現tt也是乙個引用變數,就根據它的值(與str的值一樣) 去訪問具體的記憶體空間,因為tt與str的值相等,所以說:tt與str引用對乙個對像.

關於引用傳值:

stringbuffer   sb = new stringbuffer();

sb是乙個引用變數,當執行到new stringbuffer()的時候就會分配一段記憶體空間給這個對像使用,並把這段空間的首位址返回,也就是把首位址返回給sb變數,就形成了"sb引用這個對像".

有乙個方法

void addstring(stringbuffer sbe)

下邊這段**:

stringbuffer   sb = new stringbuffer();

addstring(sb);

system.out.println(sb.tostring());

結果是:hhfunction

addstring(sb);實際就是把sb的值(什麼值?想想)傳給方法裡的引數,那個方法的引數stringbuffer sbe只是乙個引用變數,當執行這句**的時候就是把sb的值傳給sbe,然後執行方法時的**,sbe 與sb都是引用同乙個對像,因為它們的值相同.所以在方法裡訪問sbe實際就是訪問原來sb所指向的那個對像.

相當與下邊這段**

stringbuffer   sb = new stringbuffer();

stringbuffer   sbe=null;//這裡相當與方法的引數

sbe=sb;//呼叫方法的時候就會執行這樣的結果,把sb的值給與sbe

結果也是hhfunction.

有時候說sb這個對像,實際就是說sb所引用的那個對像.

何為Java引用

首先,你要明白什麼是變數。變數的實質是一小塊記憶體單元。這一小塊記憶體裡儲存著變數的值,比如int a 1 a就是變數的名,1就是變數的值。而當變數指向乙個物件時,這個變數就被稱為引用變數,比如a a new a a就是引用變數,它指向了乙個a物件,也可以說它引用了乙個a物件。我們通過操縱這個a來操...

java 軟引用 弱引用 虛引用

軟引用 用softreference類來標記,被軟引用標記的物件,只有在記憶體不足的時候,gc才會 該物件。弱引用 用weakreference類來標記,被弱引用標記的物件,在gc時,無論記憶體是否充足,都會被 掉。虛引用 用phantomreference來標記,虛引用需要有乙個與之關聯的引用佇列...

JAVA物件引用

等於運算子可以使用任意類到的運算元。基本資料型別的值可以比較。如果運算元同是 其它的物件型別 比如使用者建立的類 那麼計算結果取決於運算元是否引用相同的物件。考 慮 下下面的例子 string1 string2 在這個例子中,string1和string2必須引用同乙個字串而不是兩個不同的字串,即使...