2009-04-25 62 views
4

我最近轉移到了Java,但是我在變量別名方面遇到了一些問題。我到處搜索過,但似乎無法找到將一個對象的內容複製到另一個對象而不引用相同對象的正確方法。有沒有人有什麼建議?Java變量別名解決方法

編輯:如果它是一個int,我有混疊問題呢?我應該首先避免這種情況嗎?如果是這樣,怎麼樣?

+0

你可以在代碼中發表一行或兩行你的意思嗎?我不是100%確定你想說什麼,「將一個對象的內容複製到另一個對象而不需要引用相同的對象」。 – Joe 2009-04-25 19:51:37

+0

什麼語言使用術語別名?我會認爲兩個引用相同的對象作爲別名。然而,一個對象的深層克隆提供了一個全新的對象,它實際上並沒有引用第一個對象 - 那麼它是一個別名呢? – 2009-04-25 19:57:25

回答

10

如果您的班級實施了Clonable界面,則可以使用Object.clone()方法創建硬拷貝。 Wikipedia條目有一些很好的細節。

另一種方法是使用copy constructors,根據this page更安全。

+1

就像mihi的答案一樣有用,但我喜歡這一個的所有有用的鏈接。如果需要的話,這些鏈接爲我提供了更多信息。無論如何,我實現了某種複製構造函數。 – 2009-04-25 19:59:20

1

java.lang.Cloneable是你在找什麼。

4

這取決於「內容」。例如,您不能只複製FileInputStream,然後假定兩者都將繼續從同一文件加載。

基本上有兩種方法:如果類支持「Cloneable」接口,可以通過調用clone()來克隆它。如果沒有,它通常有一個拷貝構造函數,它從另一個對象拷貝數據。

通常情況下,您將得到一個淺拷貝(即所有類的字段都被複制,但它們指向相同的對象)。另一方面,很多對象被設計成不可變的(比如String類),並且不需要複製這樣的對象,因爲它不能被改變。

1

您不能對Java中的引用進行隱式引用,因此您無法爲變量別名。

或許,如果你解釋你想達到什麼樣的,我們可以幫助做到這一點沒有「別名」

編輯:你真的需要解釋一下你的別名int值的意思。一個int值在運行時是匿名的,所以別名是沒有意義的。