java - 返回作为参数传递给 Java 方法的内容是一种不好的做法吗?

标签 java

在修改参数后让方法返回作为参数传递给它的内容是一种不好的做法吗?

public int[] arrayLeftRotation(int[] x) {

        for(int i=0;i<x.length;i++){
            x[i]=1;
        }
    return x;
}

与修改并返回参数的副本相反。

public int[] arrayLeftRotation(int[] x) {
        int[] y = x;

        for(int i=0;i<y.length;i++){
            y[i]=1;
        }
    return y;
}

最佳答案

如果您始终返回传递给该方法的相同数组,则无需返回它。该方法可以简单地具有 void 返回类型。

ArrayList.toArray()实现为例:

public <T> T[] toArray(T[] a) {
    if (a.length < size)
        // Make a new array of a's runtime type, but my contents:
        return (T[]) Arrays.copyOf(elementData, size, a.getClass());
    System.arraycopy(elementData, 0, a, 0, size);
    if (a.length > size)
        a[size] = null;
    return a;
}

它接受数组作为输入,并可能返回相同的数组实例(修改后),但在某些情况下,它返回不同的(新)数组。这是返回数组而不是 void 返回类型的唯一原因。

顺便说一句,在第二个代码片段中,您将返回相同的数组。 int[] y = x 不会创建副本。要创建副本,请使用int[] y = Arrays.copyOf(x,x.length);。创建副本是否有意义取决于用例。如果该方法的目的是修改输入数组(如ArrayList.toArray()),则没有必要复制输入数组。

关于java - 返回作为参数传递给 Java 方法的内容是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870909/

相关文章:

java - MYSQL单个查询获取COUNT(DISTINCT columnName),带有group by和order by

java - 如何在部署java ee应用程序时执行插入查询?

java - ZXing条码扫描仪可读取巴西条码

java - Spring 4 中的自定义属性编辑器

java - 如何自动选择JTable中最后插入的行?

java - 纬度和经度为空

java - 即使调用notifydatasetchanged()后,我的 ListView 也没有更新

java - 多个一对多关系的数据库 View

java - 在 JavaScript 中访问 Java int 数组

java - 在jsp中将变量添加到mysql查询的末尾?