2017-02-10 47 views
6

我想知道昨天跳入腦海的一件事。
我爲誤導性標題提前道歉,但我真的不知道如何賦予這個權利。

那麼,假設我們是兩個對象ObjAObjB,並且,例如,ObjB有一個方法將ObjA對象作爲參數。走出去的範圍時匿名變量(?)的優點?

ObjA instanceA = new ObjA(); 
ObjB instanceB = new ObjB(); 

instanceB.method(instanceA); 

new ObjB().method(new ObjA()); 

假設這是某種功能的機構,所以對象將被銷燬:

我們可以做到這一點(以Java作爲語言) 。

我的問題是:
我們是否通過不實例化單數對象並隱式調用第二個代碼來獲得性能優勢?
這種可讀性犧牲有價值嗎?
或者這一切都沒有,因爲隱式創建的對象將被存儲在內存中,並隨着範圍而死?


注意:我不知道我是否用「隱式」或「匿名」來說,但我在Google上沒有發現太多內容。

+2

在Java中,這不應該performancewise關係。您可以查看兩個版本生成的字節碼。但作爲一般規則:使用更具可讀性的內容。 – Axel

+4

你仍然在實例化相同數量的對象。即使您不指定變量,帶有「new」字的位也是實例。 – khelwood

+2

沒有任何優勢。即使有,它會是很小的,你會浪費你的時間專注於這樣的事情。 – Kayaman

回答

6

絕對沒有差異表現明智。

但在少數情況下,您將被迫使用第一種類型。

對於前:

ObjA instanceA = new ObjA(); 
// Do something with instanceA 
instanceB.method(instanceA); 

如果你有沒有在中間做,我可以用第二種方式來保存一行代碼。

+0

所以這只是可讀性和行數 – magicleon

+0

@magicleon是在少數情況下。 –

1

,如果你需要存儲的對象使用它幾次,而無需創建新的對象,或者存儲一些方法返回一個對象的當前的結果,如果是有風險的(需要使用命名變量的第一種方法例如,因爲多結果將在下一次不同。在其他情況下,使用匿名對象會更方便,因爲它們的作用域相同,並且沒有名稱空間與不需要的標識符混淆。

2

在這種情況下可讀性是唯一的優點這種或那種方式。

benefit.If你存儲在一個局部變量的引用,然後調用該方法有沒有顯著的性能或內存,有可能是用於存儲參考的極小的性能損失。

匿名對象被創建並即時死亡。但是,仍然有匿名對象一起工作,可以提取它死就像調用使用匿名對象的方法前:

new ObjB().method(new ObjA()); 

我們不能使用兩次或更多次的匿名對象死亡做了分配的任務之後。