黑马程序员技术交流社区
标题:
程序解析题
[打印本页]
作者:
新晋猿工
时间:
2016-9-1 10:52
标题:
程序解析题
public class Test {
int x = 4;
public static void main(String[] args){
Test t = new Test();
t.x++;
t.change1(t.x);
System.out.println(t.x);
change2(t);
System.out.println(t.x);
}
void change1(int m){
m += 2;
}
static void change2(Test m){
m.x += 2;
}
}
复制代码
为什么输出是
5
7
作者:
wo1026756529
时间:
2016-9-1 11:00
t.change1(t.x);传递的是基本数据类型的值,调用后会弹栈, change2(t);传递的是引用数据类型的值,调用后还在堆内存里,因为是这个样子的吧,新手莫喷
作者:
wb277379322
时间:
2016-9-1 11:16
调用的change1和第一次打印没有关系,打印的仅仅是t.x++,change2参数是类本身,而且是静态的,它会从头开始执行代码然后执行方法算法
作者:
18366882177
时间:
2016-9-1 11:18
因为x是Test类的成员变量,成员变量作用域为整个类中,所以Test对象.x值一直在变
而change1(int m),m为方法内的局部变量,只是给方法内局部变量赋值,与成员变量x无关!
作者:
wb277379322
时间:
2016-9-1 11:20
顺便问一下,大神是怎么这么快就有这么多币的
作者:
18366882177
时间:
2016-9-1 11:26
这道题主要是靠成员变量与局部变量的作用范围
方法内的局部变量随方法的结束而结束
类的成员变量跟随类的作用范围
且change1()只是传值操作
change2()传对象操作
作者:
18366882177
时间:
2016-9-1 11:29
此题共考察了成员变量与局部变量的区别
还有方法传值与传对象的区别
作者:
zhoubinjian
时间:
2016-9-1 11:37
t.change1(t.x);这个没有让x值发生改变 , t.x++;赋值完x是5,所以打印出5;
作者:
zhoubinjian
时间:
2016-9-1 11:41
change2(t);x的值发生改变为7,主要 的是 要理解t.change1(t.x);这个x值是没有改变的,改变的地方只有 t.x++;和change2(t);
作者:
wb277379322
时间:
2016-9-1 11:45
看了上面的回复,受益非浅
作者:
新晋猿工
时间:
2016-9-1 14:45
谢谢大家的回答了~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2