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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 532989476 中级黑马   /  2014-6-7 16:44  /  1118 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在做基础题,好多问题啊。:'(
请问下面代码运行结果是什么,可以解释一下吗?谢谢啦!
class ClassA{
        int value;
}
public class TestClassA{
        public static void main(String args[]){
                int value = 10;
                changeInt(value);
                System.out.println(value);
                ClassA ca = new ClassA();
                ca.value = 10;
                changeObject(ca);
                System.out.println(ca.value);
        }
        public static void changeInt(int value){
                value++;
        }       
        public static void changeObject(ClassA ca){
                ca.value++;
        }
}

8 个回复

倒序浏览
两个方法的返回值类型应该为int啊。
回复 使用道具 举报
韩长征 发表于 2014-6-7 16:54
两个方法的返回值类型应该为int啊。

就是void 的呢,没有返回值。
回复 使用道具 举报
  1. class ClassA{
  2.          int value;
  3. }
  4. public class TestClassA{
  5.          public static void main(String args[]){
  6.                  int value = 10;
  7.                  changeInt(value);
  8.                  System.out.println(value);//结果为10
  9.                  ClassA ca = new ClassA();
  10.                  ca.value = 10;
  11.                  changeObject(ca);
  12.                  System.out.println(ca.value);//结果为11
  13.          }
  14.          
  15.          
  16.          
  17.          //此方法只的参数是一个形参,内部的value与调用时传进的参数变量没有实际的联系,并不会改变参数来源的值         
  18.          public static void changeInt(int value){
  19.                  value++;
  20.          }   
  21.          
  22.          
  23.          //该方法的参数是一个对象,对象参数传递的时候传递的是对象的一个引用,实际指向的还是该对象的内存空间,
  24.          //对对象的操作也自然的改变了其所在内存的数据的值
  25.          public static void changeObject(ClassA ca){
  26.                  ca.value++;
  27.          }
  28.          
  29.          
  30.          /*
  31.           * 举个例子来说明一下:
  32.           * 老师布置了一个作业 ,你做完了
  33.           * 然后呢,你的一个同学来找你说:哥们,作业借我抄一下。
  34.           * 你哥们拿到作业后呢,(第一个方法)在抄的过程中发现你做错了,
  35.           * 然后自己做对了,但是你的错误并没有因此而修正,你的作业还是你的作业,并没有改变
  36.           *
  37.           *
  38.           * 后来呢,你又拿着作业找到老师说,老师,帮我看看这个作业 吧
  39.           * 老师拿到作业后,发现其中的错误,并帮你修正了。你的作业也就得到了修改。
  40.           *
  41.           * 不知道这样说你能不能明白
  42.           * */
  43. }
复制代码
回复 使用道具 举报
532989476 发表于 2014-6-7 16:58
就是void 的呢,没有返回值。

我看错了。
我的理解是,一个value在栈内存中,被方法区中的方法操作后,并没有赋值给自身。
而另一个value在堆内存中,操作的是ca对象的value。
回复 使用道具 举报

感觉有点明白了。
你看我这样理解行不?就是在changeInt(int value)方法中,形参为value,形参名与主类的参数变量名一样,也就是说,换成changInt(int a) 与原来的changInt(int value) 效果是一样的。
回复 使用道具 举报
学习下了
回复 使用道具 举报
532989476 发表于 2014-6-7 17:42
感觉有点明白了。
你看我这样理解行不?就是在changeInt(int value)方法中,形参为value,形参名与主类的 ...

是的,函数的参数列表只是一个名字,并不指向某个对象
回复 使用道具 举报
Boiled_Water 发表于 2014-6-7 17:49
是的,函数的参数列表只是一个名字,并不指向某个对象

嗯,弄明白了,谢谢啦!:victory:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马