java - 返回 null 的方法正在操作最终 int 数组

标签 java arrays methods null return

任何人都可以向我解释一下为什么返回 null 的方法正在操作 Final int [] 吗?

 final int [] vals = {2,3};
 int [] vals2 = multiply(vals);

 for(int i : vals) System.out.println(i);


 int [] multiply(int [] in){
   for(int i = 0; i < in.length;i++){
      in[i] *= 2; 
   }
      return null;
 }

输出:
4
6

编辑:
我只在返回数组的方法中注意到这种行为。返回 int 的相同方法不会更改原始整数值...

完整代码:

public class Main{
    public Main(){
        int [] myList = {56, 32, 200};
        int [] newList = myList;
        bubble_sort(newList);

        for(int i : myList){ System.out.println(i); }
        System.out.println();
        for(int i : newList){ System.out.println(i); }
    }


    public int [] bubble_sort(int a[]){
        int n = a.length;
        int [] s = a;

        for (int i = 0; i < n ; i++){
                for (int j = n - 1; j >= (i+1); j--){
                    if (s[j - 1] > s[j]){
                        int t = s[j - 1];
                        s[j - 1] = s[j];
                        s[j] = t;
                    } 
                }
        }
        return null;
        // return s;
    }


    public static void main(String [] args){
        new Main();
    }
}

编辑:
以下代码按预期生成以下输出:2, 4

int vals = 2;
int vals2 = multiply(vals);
System.out.println(vals);
System.out.println(vals2);
int multiply(int in){ return in*2; }

所以我的问题是,为什么返回 int 的方法不会更改输入值,但返回数组的方法会更改输入的原始值。

最佳答案

此处,final 表示 vals 引用不能更改为其初始数组的引用。但它没有说明数组的内容是否可以更改。如您所见,它们是可以更改的。

final 关键字只会阻止您将另一个数组分配给 vals,例如

vals = anotherArray;  // Disallowed; final

单独的return null;是没有用的。 multiply 方法应声明为 void,不返回任何内容。

关于java - 返回 null 的方法正在操作最终 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498307/

相关文章:

java - 没有 EntityManager 具有可用于当前线程的实际事务

java - 使用 freemarker 发送消息

java - 再试一次 Do-While 循环

java - 无法将 Hibernate 与 MySql Azure 数据库连接

java - 如何创建没有键的 JSONObject?

java - 在数组声明中 int[] k,i 和 int k[],i;

ruby-on-rails - rails : undefined method Error when scoping

F# 私有(private)静态方法

Ruby-基于索引中的字符串对数组进行排序

Java猜谜游戏项目(初级)