Java AP Comp Sci打印方法
问题是调用方法print时输出什么?我想答案是0 10 aaa,但答案是0 11 aaa,有人能解释一下原因吗?谢谢现在是0 11 aaa changeParams中的A[0]++会影响数组中存储的值,因为指针会传递到方法中,因此操作会影响共享数据。调试并逐步完成Java AP Comp Sci打印方法,java,pointers,Java,Pointers,问题是调用方法print时输出什么?我想答案是0 10 aaa,但答案是0 11 aaa,有人能解释一下原因吗?谢谢现在是0 11 aaa changeParams中的A[0]++会影响数组中存储的值,因为指针会传递到方法中,因此操作会影响共享数据。调试并逐步完成 public void changeParams(int k, int[] A, String s){ k++; A[0]++; s += "X"; } public void print(){ int
public void changeParams(int k, int[] A, String s){
k++;
A[0]++;
s += "X";
}
public void print(){
int k = 0;
int[] A = {10, 20};
String s = "aaa";
changeParams(k, A, s);
System.out.println(k + " " + A[0] + " " + s);
}
它是0.11 aaa
changeParams中的A[0]++会影响数组中存储的值,因为指针会传递到方法中,因此操作会影响共享数据。调试并逐步完成
public void changeParams(int k, int[] A, String s){
k++;
A[0]++;
s += "X";
}
public void print(){
int k = 0;
int[] A = {10, 20};
String s = "aaa";
changeParams(k, A, s);
System.out.println(k + " " + A[0] + " " + s);
}
答案是0 11 aaa。原因是Java是按值传递的
这就是它的意思
在changeparms方法中,您影响了它的所有三个参数——传入的int、数组和字符串
当你们通过价值传递某物时,你们是某种价值。这意味着,一般来说,您不能破坏或篡改传入的原始值——关于原语和不可变类。字符串是不可变的,所以对它执行的任何操作都将生成一个新字符串,而对它执行的操作将只存在于该方法中
数组。如果您传入一个数组,您就有能力索引到该数组中并更改任何您喜欢的值,这对于您的程序的意图可能是可取的,也可能是不可取的
例如,如果您传入一个可变的对象-日历,也同样如此;如果您传入一个日历实例,您将能够修改它的状态星期几、小时、秒、毫秒等,并且在以后尝试将同一实例用于其他内容时可能会造成严重破坏
这就是为什么唯一改变的是11。[0]处的值已递增,而且由于数组不是不可变的,因此您实际上是在更改给定位置处数组的值。答案是0 11 aaa。原因是Java是按值传递的
这就是它的意思
在changeparms方法中,您影响了它的所有三个参数——传入的int、数组和字符串
当你们通过价值传递某物时,你们是某种价值。这意味着,一般来说,您不能破坏或篡改传入的原始值——关于原语和不可变类。字符串是不可变的,所以对它执行的任何操作都将生成一个新字符串,而对它执行的操作将只存在于该方法中
数组。如果您传入一个数组,您就有能力索引到该数组中并更改任何您喜欢的值,这对于您的程序的意图可能是可取的,也可能是不可取的
例如,如果您传入一个可变的对象-日历,也同样如此;如果您传入一个日历实例,您将能够修改它的状态星期几、小时、秒、毫秒等,并且在以后尝试将同一实例用于其他内容时可能会造成严重破坏
这就是为什么唯一改变的是11。[0]处的值已递增,而且由于数组不是不可变的,因此您实际上是在更改给定位置处数组的值。肯定有一种确定的方法来判断,呃?这个问题似乎离题了,因为它没有提出一个合适的问题来解决。我读过一本Java书籍,但我只是对这个代码中什么是不可变的概念感到困惑。当然,有一个明确的方法来说明,呃?这个问题似乎离题了,因为它没有提出一个合适的问题来解决。我读过一本Java书籍,但我只是对这个代码什么是不可变的概念感到困惑哦,所以它只影响数组,而不是int和String?你能至少投票支持我的答案并将其标记为正确吗?哦,所以它只影响数组数组而不是int和String?你能至少投票支持我的答案并把它标记为正确吗?