2016-03-07 245 views
0

這兩個術語總是困在我的腦海裏。它們在邏輯上是相同的還是完全不同的?例如,在Java書:介紹編程梁啓超,他說:「等同」與「等於」(或「絕對等於」)相同嗎?

您可以使用一個通用類不指定像 這樣一個具體的類型:

GenericStack stack = new GenericStack(); // raw type

這是大致相當於

GenericStack<Object> stack = new GenericStack<Object>();

回答

1

有很多層次的平等。通常它們被指定爲諸如「相等」或「等同」的詞。這些詞的意思完全取決於上下文,但通常平等意味着等價,而不是相反。

例如,代碼一個給予兩片,我們可以說,一個都是平等的,如果他們包括一模一樣的人物,說他們是等價的,如果我們可以始終替換A by B,反之亦然,而不改變程序的行爲。如果我們這樣做,

int i; 
i = 10; 

int i = 10; 

是不相等的,但相等的。

您報價中的兩個代碼片段被作者稱爲「大致相當」。 「粗略」這個詞表明它們根本不相同。事實上:

GenericStack stack = new GenericStack(); 
GenericStack<String> stack2 = stack; 

編譯(含警告),而

GenericStack<Object> stack = new GenericStack<Object>(); 
GenericStack<String> stack2 = stack; 

沒有。

作者的意思是「粗略等價」,原始類型在許多(但不是全部)情況下的行爲類似於GenericStack<Object>。特別是,您可以放入任何對象。