java - Java 中的过早优化 : when to use "x = foo.getX()" vs simply "foo.getX()"

标签 java coding-style

当我发现自己多次调用同一个 getter 方法时,这应该被认为是一个问题吗? [总是] 分配给局部变量并只调用一次是否更好?

我确定答案当然是“视情况而定”。

我更关心更简单的情况,其中 getter 只是一种“传递私有(private)变量的值”类型的方法。即不涉及昂贵的计算,不消耗数据库连接等。

我的“是否更好”的问题与代码可读性(风格)和性能有关。也就是说,是否有那么大的性能损失:

SomeMethod1(a, b, foo.getX(), c);
SomeMethod2(b, foo.getX(), c);
SomeMethod3(foo.getX());

对比:

X x = foo.getX();
SomeMethod1(a, b, x, c);
SomeMethod2(b, x, c);
SomeMethod3(x);

我意识到这个问题有点挑剔和灰色。但我刚刚意识到,我根本没有评估这些权衡的一致方法。我正在寻找一些不仅仅是完全异想天开的标准。

谢谢。

最佳答案

选择不应该真正与性能有关,而应该与代码可读性有关。

当您创建一个变量时,您可以为其指定在当前上下文中应有的名称。当您多次使用同一个值时,它肯定具有真正的意义,而不仅仅是一个方法名称(或者更糟的是一系列方法)。
阅读起来真的更好:

String username = user.getName();
SomeMethod1(a, b, username, c);
SomeMethod2(b, username, c);
SomeMethod3(username);

SomeMethod1(a, b, user.getName(), c);
SomeMethod2(b, user.getName(), c);
SomeMethod3(user.getName());

关于java - Java 中的过早优化 : when to use "x = foo.getX()" vs simply "foo.getX()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612508/

相关文章:

c++ - 成员指针或引用参数?

c - C 中的结构名称标准

java - 在 Selenium Java 中需要这些(Firefox)浏览器配置文件设置的 chrome 等价物

java - 无法使用java访问Linux中的文件

java - 单击时在 JButton 上绘制一个椭圆

java - 死锁和同步方法

java - 注释来解决接口(interface)未实现方法的所有错误?

c++ - Visual Studio 中不同编译选项的不同源文件

java - 使用条件运算符来选择哪个对象调用特定方法?

c++ - 给定一个指向 C++ 对象的指针,调用静态成员函数的首选方法是什么?