黑马程序员技术交流社区

标题: 这段程序,还是不太懂koo.a=2 [打印本页]

作者: luqh    时间: 2015-3-17 19:26
标题: 这段程序,还是不太懂koo.a=2
  1. public class Demo {
  2. public static void main(String[] args) {
  3.         int a = 1;
  4.         add(a);
  5.         Koo koo = new Koo();add(koo);
  6.         System.out.println(a+","+koo.a);//输出1,2  为什么koo.a为2呢?总觉得应该跟a的值一样是1
  7.         System.out.println(koo);
  8. }
  9. public static int add(int a){
  10.           a++;return a;
  11.         }

  12. public static int add(Koo koo){
  13.         Koo k = koo;
  14.         k.a++;return k.a;
  15. }
  16. }
  17. class Koo{
  18.         int a = 1;
  19. }
复制代码

作者: 田晓莉    时间: 2015-3-17 20:43
你确定这段代码可以编译?怎么我照着你的敲了一下,报错呢
作者: 田晓莉    时间: 2015-3-17 20:56
个人看法,提出来交流下。
第5行 Koo koo = new Koo();//创建一个Koo类型的对象koo,会调用class Koo{ int a =1}
第6行 add(koo);//调用第13行 public static int add(Koo koo),里面的k就赋值为1,k.a++的值就是2,所以koo.a=2.
这么分析对么?
另外,a=1么??我怎么觉得a=2?add(a)这个函数不是让a自加,所以a=2了么??
我也刚学,不太懂,说的不对的地方,别见怪哈
作者: 田晓莉    时间: 2015-3-17 21:21
那个class Koo,前面加一个static
作者: 董志立    时间: 2015-3-17 21:41
本帖最后由 董志立 于 2015-3-17 21:51 编辑

个人感觉,koo.a=2是因为如下:楼主感觉koo.a=1,是因为感觉创建的对象在堆内存中,所以应该koo引用的new Koo()这块内存中a的默认初始值为0,但是执行有问题,应该是开辟完内存后,然后执行“默认初始化值”即是Koo()类中的这句int a=1,而不是new Koo()堆内存中对于int类型的默认为0!
作者: 极光_CDY    时间: 2015-3-17 22:50
public class Demo {
public static void main(String[] args) {
        int a = 1;
        add(a);
        Koo koo = new Koo();add(koo);
        System.out.println(a+","+koo.a);//输出1,2  为什么koo.a为2呢?总觉得应该跟a的值一样是1
        System.out.println(koo);
}
public static int add(int X){
          X++;return X;
        }

public static int add(Koo koo){
        Koo k = koo;
        k.a++;return k.a;
}
}
class Koo{
        int a = 1;
}
a改为X,只是形参,所以是X自增。
而堆内存中的地址指向,a确实自增了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2