liulisha丶
2019-04-19 20:02
采纳率: 100%
浏览 1.9k
已采纳

成员变量作为参数传入方法后进行修改,为什么没有修改成功?

public class Test {

    int a = 1;
    @org.junit.Test
    public void test(){
        change(a);
        System.out.println(a);
    }

    private void change(int a){
        a = 2;
    }
}

打印出的结果仍为1
求详细解释

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 暗夜墨龍 2019-04-19 22:25
    已采纳

    public class Test {

    //我用一下这段代码给你分步解说,static代表静态,你可以忽略,我在这里使用static是为了让main方法调用
    
    //和你同样的成员变量a
    static int a=1; 
    
    //和你同样的成员方法
    public static void test(){
        //下面调用的方法后,用a变量接受方法的返回值
        a=change(a);
        //输出a的内容
        System.out.println("a的值第二次输出="+a);
    }
    private static int change(int a){
        //第一次输出a的内容
        System.out.println("a的值第一次输出="+a);
        //给形参a进行赋值
        a=2;
    //谁调用,就把a的值返回给谁,不接受a的值就会消失
    return a;
    }
    public static void main(String[] args) {
        //使用main方法进行程序的运行操作
        test();
    }
    

    }
    //关于你程序的解释结果如下:
    //第一:你用change()方法改变的不是你成员变量的参数,
    // 在此方法中的a是按值传递的,不是按引用地址传递的,
    // 所以a只能当做方法中的局部变量使用,a=2后,
    // 方法执行完a也随方法结束而消失了,所以,
    // 你的成员变量a的值不会被改变。
    //第二:想要改变成员变量a的值,你的明确能区分出来
    // 什么时候使用的a是你的成员变量,什么时候是
    // 使用的方法内局部的变量
    //第三:解决的方式如我所写的代码,需要给赋值的方法增加返回结果
    // 这样你在用你的成员变量去接这个结果,它就会改变了
    //第四:建议你不明白输出错误出在那里时,就去在每个环节对它进行输出
    // 根据结果判断它是在什么环节出现和你意料之外的结果,然后自己分析。

    评论
    解决 无用
    打赏 举报
  • 查看更多回答(1条)

相关推荐 更多相似问题