2017-02-10 49 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()); 

我们不能使用两次或更多次的匿名对象死亡做了分配的任务之后。