liulisha丶 2019-04-19 20:02 采纳率: 16.7%
浏览 2140
已采纳

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

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条)

报告相同问题?

问题事件

  • 已采纳回答 11月9日

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试