A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 新晋猿工 中级黑马   /  2016-9-1 10:52  /  1400 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test {

  2.         int x = 4;

  3.         public static void main(String[] args){
  4.                  Test t = new Test();
  5.                 t.x++;
  6.                 t.change1(t.x);
  7.                 System.out.println(t.x);
  8.                  change2(t);
  9.                 System.out.println(t.x);
  10. }

  11.         void change1(int m){
  12.             m += 2;
  13. }

  14.         static void change2(Test m){
  15.                 m.x += 2;
  16. }
  17. }
复制代码

为什么输出是
5
7

14 个回复

倒序浏览
t.change1(t.x);传递的是基本数据类型的值,调用后会弹栈, change2(t);传递的是引用数据类型的值,调用后还在堆内存里,因为是这个样子的吧,新手莫喷
回复 使用道具 举报
调用的change1和第一次打印没有关系,打印的仅仅是t.x++,change2参数是类本身,而且是静态的,它会从头开始执行代码然后执行方法算法
回复 使用道具 举报

回帖奖励 +10

因为x是Test类的成员变量,成员变量作用域为整个类中,所以Test对象.x值一直在变
而change1(int m),m为方法内的局部变量,只是给方法内局部变量赋值,与成员变量x无关!
回复 使用道具 举报
顺便问一下,大神是怎么这么快就有这么多币的
回复 使用道具 举报

回帖奖励 +10

这道题主要是靠成员变量与局部变量的作用范围
方法内的局部变量随方法的结束而结束
类的成员变量跟随类的作用范围
且change1()只是传值操作
change2()传对象操作
回复 使用道具 举报
此题共考察了成员变量与局部变量的区别
还有方法传值与传对象的区别
回复 使用道具 举报
t.change1(t.x);这个没有让x值发生改变 ,  t.x++;赋值完x是5,所以打印出5;
回复 使用道具 举报

回帖奖励 +10

change2(t);x的值发生改变为7,主要 的是 要理解t.change1(t.x);这个x值是没有改变的,改变的地方只有  t.x++;和change2(t);
回复 使用道具 举报

回帖奖励 +10

看了上面的回复,受益非浅
回复 使用道具 举报
谢谢大家的回答了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马