为啥选A啊求解析111

public class Test {
public static void main(String[] args) {
A a=new A();
B b=new B();
int c= 10;
a. change (b, c);
Sgten.out.println(b.v1);
System.out.println(b.v2);
System.out.println(c);
}
}
class A{
public void change(B b, int c) {
b.v1 = 3;
c=3;
b.changev2(c) ;
}
}
class B{
public int v1 = 1;
public int v2 = 1;
public void changev2(int c) {
this. v2= c;
}
}
A.3和3和10
B. 3和3和3
C1和1和10
D.3和1和10

看到这一句

a.change(b, c);

这里调用到了A的change方法,传入了参数b和c

class A {
    public void change(B b, int c) {
        b.v1 = 3; //设置了b.v1 所以第一个输出的是3
        c = 3; //把传入的c替换成了3,所以下面带入c的值永远是3
        b.changev2(c);
    }
}

b.changev2(c);

然后又调用了B的changev2方法

class B {
    public int v1 = 1;
    public int v2 = 1;

    public void changev2(int c) {
        this.v2 = c; //带入的c永远是3,this.v2 = b.v2 = 3,所以第二行输出是3
    }
}

System.out.println(c); 这行输出的c为什么是10呢

因为上面的 int c = 10;
只是在A类和B类发生了改变,当前类里的c并没有改变
所以选A

先走的a. change 方法,此时把b对象传进来 此时b.v1等于3了
然后c赋值3 并且走b. change方法,吧3传过去,此时b.v2等于3了
然后c一直都是10 因为传参没传地址
就是
3
3
10

img

如果你不理解为啥是A,建议你把代码放到工具里,打断点运行一下,就可以看出来了
主要考察方法的使用,不复杂的,加油