Java面向对象————封装之值传递与引用传递例题解析

发布时间:2024年01月16日

写出程序的执行结果()

class Value{

  int i = 15;

}

class Test{

public static void main(String argv[]) {

Test t = new Test();

t.first();

}

 

public void first() {

int i = 5;

Value v = new Value();

v.i = 25;

second(v, i);

System.out.println(v.i);

}

    

public void second(Value v, int i) {

i = 0;

v.i = 20;

Value val = new Value();

v = val;

System.out.print(v.i + " " + i); 

}

}

A.15 0 20

B.15 0 15

C.20 0 20

D.0 15 20
答案: A.15 0 20
以下是答案解析

第一步:
会先执行main方法,将main方法入栈
在这里插入图片描述
第二步:因为main调用了frist()方法,开始执行frist()方法,frist()方法入栈,创建了Value的对象,在堆内存中会开辟以一个对象的内存,地址为假设为0x11,v.i的值为15
在这里插入图片描述

第三步:执行frist()方法中v.i = 25。堆中v.i = 15;变为v.i = 25;
在这里插入图片描述

第四步:执行second(v,i)语句,second() 入栈,内存情况如下图,执行second()方法中v.i = 20。堆中v.i = 25;变为v.i = 20;
在这里插入图片描述
第五步:创建了Value的对象,在堆内存中会开辟以一个新的对象的内存,地址为假设为0x22,v.i的值为15, 执行v = val, v=ox11 变为v=ox22,并指向新的new对象地址,之后执行System.out.println(v.i+ " " + i),此时v.i = 15, i = 0,所以控制台输出15 0.

在这里插入图片描述
第五步:second()出栈。执行frist()方法的System.out.println(v.i).此时v.i = 20.控制台输出20.
在这里插入图片描述
最后答案为: A.15 0 20

文章来源:https://blog.csdn.net/weixin_58885580/article/details/135505936
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。