国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java的“對(duì)象思想”學(xué)習(xí)筆記[二]

2019-11-17 06:34:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在這篇文章里我將介紹一些java對(duì)于對(duì)象的基本處理模式的問(wèn)題。
首先看一個(gè)有關(guān)對(duì)象相等性(Object equivalence)的例子:
先看下面的代碼:
public class EqualTest1{
public static void main(String[] args){
Integer n1 = new Integer(20);
Integer n2 = new Integer(20);
System.out.PRintln(n1 = = n2);
System.out.println(n1 != n2);
}
}
程序的目的是輸出括號(hào)中的比較結(jié)果(boolean值),初次接觸Java的人很輕易的認(rèn)為輸出結(jié)果為先true而后false。
但實(shí)際上結(jié)果是先f(wàn)alse而后true,因?yàn)殡m然兩個(gè)Integer對(duì)象的值是相同的,其reference卻不同。(注:有關(guān)reference的含義在我的上一篇學(xué)習(xí)筆記上有過(guò)介紹,這里不再贅述。)
為了解釋上面這個(gè)問(wèn)題,我們應(yīng)該了解Java對(duì)于對(duì)象的基本處理模式:
當(dāng)你操作某個(gè)對(duì)象時(shí),你所操作的其實(shí)是它的reference,比如A = B這個(gè)式子,就會(huì)將A和B都指向原來(lái)B所指向的對(duì)象,假如你改變了A的內(nèi)容,那么同時(shí)也就更改了B的內(nèi)容!因?yàn)锳和B內(nèi)含同一個(gè)object reference。
原先A中所儲(chǔ)存的reference,在賦值的過(guò)程中被覆寫(xiě)了,實(shí)際上就是遺失掉了,因?yàn)槔厥掌?garbage collector)會(huì)在適當(dāng)時(shí)機(jī)清理該reference原本指向的那個(gè)對(duì)象。

那么如何知道對(duì)象的內(nèi)容是否相等呢?這里就要用到equals(),請(qǐng)看下面的代碼:
public class EqualTest2{
public static void main(String[] args){
Integer n1 = new Integer(20);
Integer n2 = new Integer(20);
System.out.println(n1.equals(n2));
}
}
這樣輸出的就是我門(mén)所期望的true了。然后,事情并不會(huì)如此簡(jiǎn)單,假如建立自有的class,那么事情會(huì)怎么樣呢?請(qǐng)看相面的代碼:
class Value{
int i;
}

public class EqualTest3{
public static void main(String[] args){
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 20;
System.out.println(v1.equals(v2));
}
}

結(jié)果又輸出了false,這是為什么呢??
其實(shí),equals()的缺省行為是拿reference來(lái)比較,所以除非在你的class中覆寫(xiě)(override)equals(),否則不會(huì)得到預(yù)期的結(jié)果,而Java標(biāo)準(zhǔn)程序庫(kù)中的大多數(shù)class都覆寫(xiě)了equals(),所以他們都會(huì)比較對(duì)象的內(nèi)容是否相同,這樣一來(lái),上面的問(wèn)題就不難解決了。

有關(guān)覆寫(xiě)(override)技術(shù)將在今后深入的文章中介紹:)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐城市| 漳平市| 新晃| 哈密市| 团风县| 黄冈市| 白朗县| 财经| 仲巴县| 北川| 澄迈县| 延长县| 晋中市| 武强县| 繁峙县| 灵丘县| 贡嘎县| 周宁县| 杭锦后旗| 景宁| 仁化县| 肃宁县| 赤壁市| 商南县| 徐汇区| 渭源县| 页游| 吉林市| 沅江市| 建水县| 大同县| 塔河县| 余姚市| 蛟河市| 麻阳| 武城县| 上杭县| 湄潭县| 湖北省| 黔西| 开封县|