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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luqh 中级黑马   /  2015-3-17 19:26  /  1540 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

5 个回复

倒序浏览
你确定这段代码可以编译?怎么我照着你的敲了一下,报错呢
回复 使用道具 举报
个人看法,提出来交流下。
第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了么??
我也刚学,不太懂,说的不对的地方,别见怪哈
回复 使用道具 举报
那个class Koo,前面加一个static
回复 使用道具 举报
本帖最后由 董志立 于 2015-3-17 21:51 编辑

个人感觉,koo.a=2是因为如下:楼主感觉koo.a=1,是因为感觉创建的对象在堆内存中,所以应该koo引用的new Koo()这块内存中a的默认初始值为0,但是执行有问题,应该是开辟完内存后,然后执行“默认初始化值”即是Koo()类中的这句int a=1,而不是new Koo()堆内存中对于int类型的默认为0!
回复 使用道具 举报
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确实自增了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马