匿名变量(?)的优点?

时间:2017-02-10 09:29:16

标签: java scope anonymous

我想知道昨天有什么东西跳进了我的脑海。
我提前为这个误导性的标题道歉,但我真的不知道如何获得这个权利。

好吧,假设我们是两个对象ObjAObjB,例如,ObjB有一个方法,它将ObjA个对象作为参数。

我们可以这样做(以java为语言):

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

instanceB.method(instanceA);

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

假设这是某个函数的主体,因此当超出范围时,对象将被销毁。

我的问题是:
通过不实例化单个对象并隐式调用第二个代码,我们是否获得了性能优势?
这种可读性牺牲是否值得?
或者它是否一无所获,因为隐式创建的对象将存储在内存中并且仍然按范围死亡?

注意:我不知道我是说“隐含”还是“匿名”,但我在谷歌上找不到多少。

3 个答案:

答案 0 :(得分:6)

绝对没有性能差异。

但在少数情况下,您将被迫使用第一种类型。

例如:

WARNING in ./js/pedigree.js
32:35-49 "export 'default' (imported as 'DisorderLegend') was not found in './disorderLegend'

ERROR in ./js/pedigree.js
Module not found: Error: Can't resolve './OkCancelDialogue' in '/home/tim/workspace/projects/public/js/ext-lib/panogram/js'
 @ ./js/pedigree.js 5:0-54
 @ ./js/viewerPedigree.js
 @ ./main.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./main.js
webpack: Failed to compile.

如果你在中间没什么可做的,我可以用第二种方法来保存一行代码。

答案 1 :(得分:2)

在这种情况下,可读性是这种或那种方式的唯一优势。

没有显着性能或内存优势。如果您将引用存储在本地变量中然后调用该方法,则存储的极小性能可能会受到影响参考资料。

创建匿名对象并立即死亡。但是,仍然使用匿名对象可以在使用匿名对象调用方法之前提取工作:

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

我们不能使用两次或更多,因为匿名对象在完成其分配的任务后立即死亡。

答案 2 :(得分:1)

如果您需要存储对象以多次使用它而不创建新对象,或者存储某些方法的当前结果(如果存在风险,则返回对象),则需要使用命名变量的第一种方法(例如,因为多线程)下次结果会有所不同。在其他情况下,使用匿名对象更方便,因为它们的范围相同,并且没有使用不需要的标识符混淆命名空间。