首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AP Comp Sci打印方法

AP Comp Sci打印方法
EN

Stack Overflow用户
提问于 2014-03-22 21:33:31
回答 2查看 179关注 0票数 1
代码语言:javascript
复制
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 10 aaa,但答案键上写着0 11 aaa,有人能解释一下为什么吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-22 21:45:03

0 11 aaa

A[0]++changeParams()中影响存储在数组中的值,因为指针被传递到方法中,所以操作会影响共享数据。调试这个并逐步完成..。

代码语言:javascript
复制
public class SO {

    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);
    }

    public static void main(String... args) throws Exception {
        new SO().print();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2014-03-22 22:00:07

答案是0 11 aaa。其原因是Java是通过值传递的。

这是什么意思。

changeParams方法中,影响到它的所有三个参数-- int传入、数组和String

当您按值传递某物时,您就是该值的giving them a copy (某种类型)。这意味着,一般来说,您不能销毁或篡改传入的原始值--对于原语和不可变类。String是不可变的,所以对它所做的任何操作都会产生一个新的String -而对它所做的操作只会存在于该方法中。

数组are not immutable。如果您传入一个数组,您就有能力对其进行索引并更改任何您喜欢的值,这对程序的意图来说可能是可取的,也可能是不可取的。

如果传入一个可变对象(例如,Calendar;如果传入一个Calendar实例,则可以修改其状态(一周中的一天、小时、秒、毫秒等),并且在以后尝试使用同一个实例时可能会造成破坏。

这个是为什么唯一改变的东西是11A[0]上的值已经增加,而且由于数组不是不可变的,因此实际上正在更改给定位置的数组的值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22583866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档