作者: 田晓莉 时间: 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确实自增了!