public class Test3_Wrench2 {
int size; //定义类的成员变量size
public static void main(String[] args) { //主方法
Test3_Wrench2 w = new Test3_Wrench2(); //创建Test3_Wrench2类的对象w
w.size = 11; //通过对象.成员变量赋值,即w.size = 11;
Test3_Wrench2 w2 = go(w, w.size); //创建对象w2
/*
*1.调用go方法,传入参数为类对象w和整数类型w.size
*2.w.size传入后被赋值为12,即w.size = 12;
*3.调用完go方法返回的对象w赋值给w2,即w2对象的地址值指向w地址值
*4.go方法被调用完后弹栈
*5.w.size = 12属于基本数据类型值传递,go方法弹栈之后不会改变
*6.Test3_Wrench2 w2 = w属于引用数据类型值传递,go方法弹栈后会改变w2的地址值,即w2和w一样指向同一个地址值
*7.所以输出w2.size的值是11
*/
System.out.print(w2.size);
}
static Test3_Wrench2 go(Test3_Wrench2 wr, int s) { //成员方法
/*
* 静态保证主方法可以调用,返回值类型是Test3_Wrench2类,参数列表Test3_Wrench2 wr和int s
*/
s = 12; //变量s赋值
return wr; //返回wr对象,即返回参数列表中的wr对象
}
}
结果为:
A. 11
B. 12
c.编译失败。
D.运行时异常被抛出
答案是A。
ps:上面面试题是之前遇到的,提问后整理分析,包括注解分析和画图分析,有用的请拿去看看,谢谢。
|
|