java - 为什么我不能在 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 始终是按值传递的。
在您将原始整数值 1 传递给函数“change(int number)”的第一个块中,仅传递了该值。但是主函数和更改函数中的变量“int number”引用了两个不同的内存引用。即由于这两个不是相同的内存引用,这两个值将是不同的。因此,如果您在主函数中打印它的值,它将是 1(原始),如果您在更改函数本身中打印它的值,那么它将是 100(复制值),但在主函数中,它的值将是原始的变量的值,即 1。
现在,在第二个块中,您正在传递数组对象以更改函数,您正在传递数组对象的引用。Java 创建引用的副本,因此在逻辑上指向相同的内存位置。因此,对它的任何更改都将反映在原始和复制中(基本相同)。