首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匿名变量(?)优势?

匿名变量(?)优势?
EN

Stack Overflow用户
提问于 2017-02-10 17:29:16
回答 3查看 1.6K关注 0票数 6

我在想昨天突然出现在我脑海里的一件事。

我为这个误导性的标题提前道歉,但我真的不知道该如何命名。

假设我们有两个对象ObjAObjB,例如,ObjB有一个以ObjA对象为参数的方法。

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

代码语言:javascript
复制
ObjA instanceA = new ObjA();
ObjB instanceB = new ObjB();

instanceB.method(instanceA);

代码语言:javascript
复制
new ObjB().method(new ObjA());

假设这是某个函数体,那么当对象超出作用域时就会被销毁。

我的问题是:

通过不实例化单个对象并像第二个代码一样隐式调用,我们是否获得了性能优势?

这种可读性的牺牲有价值吗?

或者这一切都是徒劳的,因为隐式创建的对象将存储在内存中,并且无论如何都会被作用域消亡?

注意:我不知道我说的是“隐含的”还是“匿名的”,但我在Google上没有找到太多。

EN

回答 3

Stack Overflow用户

发布于 2017-02-10 17:35:09

在性能方面绝对没有差别。

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

对于ex:

代码语言:javascript
复制
ObjA instanceA = new ObjA();
// Do something with instanceA
instanceB.method(instanceA);

如果您在中间无事可做,我可以使用第二种方法来保存一行代码。

票数 6
EN

Stack Overflow用户

发布于 2017-02-10 17:46:09

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

如果你在一个局部变量中存储一个引用,然后调用这个方法,没有显著的性能损失()或内存损失( memory benefit.If ),那么在存储引用的时候,可能会有非常小的性能损失。

匿名对象会立即创建和终止。但是,对于匿名对象,工作可以在它死之前提取出来,就像使用匿名对象调用方法一样:

代码语言:javascript
复制
 new ObjB().method(new ObjA());

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

票数 2
EN

Stack Overflow用户

发布于 2017-02-10 17:45:22

第一种方法是使用命名变量,如果你需要存储对象来多次使用它而不创建新的对象,或者需要存储某些方法返回对象的当前结果,如果存在风险(例如,由于多线程),结果将在下一次完全不同。在其他情况下,使用匿名对象更方便,因为它们的作用域是相同的,并且不会出现不需要的标识符混乱的名称空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42155839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档