这个java代码有什么问题吗?

时间:2011-04-19 20:51:52

标签: java

  

可能重复:
  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);
    }

我理解第一个实例化一个字节数组并返回它但是,第二个也返回一个字节数组...

那为什么第二个更好?

8 个答案:

答案 0 :(得分:3)

他们是完全相同的。第二个是简洁的。

有时引入中间变量来打破冗长的链调用可以提高可读性,但在你的情况下这肯定是正确的。

答案 1 :(得分:2)

仅仅因为第二个更简洁。它们在功能上是等价的。

答案 2 :(得分:1)

它们在功能上是等价的,但每种都有其自身的优点:

  • 第二个更简洁,个人就是我通常使用的
  • 第一个更容易调试,因为在调用方法之后,但在点击return语句之前,您可以查看/检查/修改字节数组。

我怀疑在许多调试器中可能有一种方法可以看到“即将返回的值”但不是在调试器中花费大量时间的人,我从未真正看到过:(

当然,另一种方法是调试Files.toByteArray

答案 3 :(得分:0)

我不确定他们中的任何一个都有什么问题。他们做同样的事情。我看到的唯一优势是第二个是稍微减少的代码,除了阅读它的人之外没什么区别。

答案 4 :(得分:0)

如果你认为所有事情都是平等的,更少的线和更少的变量更好,那么第二个更好。

如果变量baFile的存在使代码对您更具可读性,那么它会更好。

对我而言,它没有,所以我更喜欢第二种。

答案 5 :(得分:0)

是什么让你认为第二个更好?这是“给我一个防御老师标记错误的问题”的问题吗?

答案 6 :(得分:0)

唯一的区别是: 在1中:您创建一个字节数组,您可以在其中放置文件中的字节。你返回数组。 在2中:您返回完全相同,但不在其间创建字节数组。 Instea首先将字节放入数组中,然后立即将它们返回。

第二个更好的唯一原因是它更快,而且代码更少。

答案 7 :(得分:0)

他们是一回事。它们都返回一个指向字节数组的指针。第一个只是分配一个本地范围的变量,只有在你返回它之前你才能读/写数组。你将失去的只是完成任务所需的时间,尽管大多数编译器应该只是自动将已编译的代码更改为第二个版本,因为你对baFile一无所知。