可能重复:
Is it better to create a new object and return it or create the new object in the return statement?
大家好,
有人可以解释第一种方法是否比第二种更差?
public byte[] getBytesForSource() throws IOException {
Preconditions.checkNotNull(this.fSource, "Raw source does not exist.");
byte[] baFile = Files.toByteArray(this.fConvertedSource);
return baFile;
}
VS
public byte[] getBytesForSource() throws IOException {
Preconditions.checkNotNull(this.fSource, "Raw source does not exist.");
return Files.toByteArray(this.fConvertedSource);
}
我理解第一个实例化一个字节数组并返回它但是,第二个也返回一个字节数组...
那为什么第二个更好?
答案 0 :(得分:3)
他们是完全相同的。第二个是简洁的。
有时引入中间变量来打破冗长的链调用可以提高可读性,但在你的情况下这肯定是正确的。
答案 1 :(得分:2)
仅仅因为第二个更简洁。它们在功能上是等价的。
答案 2 :(得分:1)
它们在功能上是等价的,但每种都有其自身的优点:
我怀疑在许多调试器中可能有一种方法可以看到“即将返回的值”但不是在调试器中花费大量时间的人,我从未真正看到过:(
当然,另一种方法是调试Files.toByteArray
。
答案 3 :(得分:0)
我不确定他们中的任何一个都有什么问题。他们做同样的事情。我看到的唯一优势是第二个是稍微减少的代码,除了阅读它的人之外没什么区别。
答案 4 :(得分:0)
如果你认为所有事情都是平等的,更少的线和更少的变量更好,那么第二个更好。
如果变量baFile
的存在使代码对您更具可读性,那么它会更好。
对我而言,它没有,所以我更喜欢第二种。
答案 5 :(得分:0)
是什么让你认为第二个更好?这是“给我一个防御老师标记错误的问题”的问题吗?
答案 6 :(得分:0)
唯一的区别是: 在1中:您创建一个字节数组,您可以在其中放置文件中的字节。你返回数组。 在2中:您返回完全相同,但不在其间创建字节数组。 Instea首先将字节放入数组中,然后立即将它们返回。
第二个更好的唯一原因是它更快,而且代码更少。
答案 7 :(得分:0)
他们是一回事。它们都返回一个指向字节数组的指针。第一个只是分配一个本地范围的变量,只有在你返回它之前你才能读/写数组。你将失去的只是完成任务所需的时间,尽管大多数编译器应该只是自动将已编译的代码更改为第二个版本,因为你对baFile一无所知。