【发布时间】:2021-11-18 21:17:26
【问题描述】:
我想知道执行以下操作是否更好:
String currentUserName = user.getName();
Integer currentUserAge = user.getAge();
User foundUser = userRepository.findByAgeAndUsername(currentUserName, currentUserAge);
或
User foundUser = userRepository.findByAgeAndUsername(user.getName(), user.getAge());
其中一个是否比另一个更高效?我想做第一个,因为它提高了代码库的可读性和可理解性,但它看起来确实很冗长,并且在 IDE 上占用了大量的文字空间(虽然可能不是内存空间?)。我正在寻找这些方法的任何优点或缺点,而不仅仅是在这个特定示例中。
谢谢
【问题讨论】:
-
没有性能差异。如果仅此而已,它们也应该编译为相同的字节码。
-
这两者的区别是零。这不是一个微小的差异,而是一个零的差异。
-
@LouisWasserman 但是编译器不会花时间优化这些变量吗?让它们实际上只是 cmets?
-
并非如此。它编译成同样的东西。在编译时,我想它可能会节省几纳秒。你花在考虑它上的时间,以最低工资为预算,比编译时节省的 CPU 量更昂贵。
-
如果我们假设 getName() 和 getAge() 是简单的 getter,那根本没有区别。但是,如果它们包含复杂的计算或一些繁重的 I/O(这是不好的做法,但谁没有见过 getter 执行的操作不仅仅是返回值)?
标签: java spring performance qa software-quality