首页 > 解决方案 > 为什么我不能在 Java 中修改变量而是数组?

问题描述

我不知道为什么我不能在Java中修改一个变量,拿我的代码,请帮助我

public class Main {
    public static void main(String[] args){
        int number = 1;
        change(number);
        System.out.println(number); // it should print 100
    }

    public static void change(int number){
        number = number * 100;
    }
}

现在,为什么当我使用数组时它确实有效?

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};

        // prints 100, 200, 300
        for(int i = 0; i < numbers.length; i++){
            System.out.println(numbers[i]);
        }
    }

    public static void change(int[] numbers) {
        for(int i = 0; i < numbers.length; i++){
            numbers[i] = numbers[i] * 100;
        }
    }
}

标签: java

解决方案


这是Java基础!Java 始终是按值传递的。

在您将原始整数值 1 传递给函数“change(int number)”的第一个块中,仅传递了该值。但是主函数和更改函数中的变量“int number”引用了两个不同的内存引用。即由于这两个不是相同的内存引用,这两个值将是不同的。因此,如果您在主函数中打印它的值,它将是 1(原始),如果您在更改函数本身中打印它的值,那么它将是 100(复制值),但在主函数中,它的值将是原始的变量的值,即 1。

现在,在第二个块中,您正在传递数组对象以更改函数,您正在传递数组对象的引用。Java 创建引用的副本,因此在逻辑上指向相同的内存位置。因此,对它的任何更改都将反映在原始和复制中(基本相同)。


推荐阅读