前者的对象c是通过关键字new创建的,执行时在堆中分配对象的地址,在栈中分配color,num的内存,并且两者建立指向关系。当执行语句c.num=5,修改了栈中num的值。car c1=c是在堆中分配一个c1的内存并且将c的地址赋给c1,即两者指向栈中同一个内存,当对c1属性修改时就是对c的修改。所以结果输出5 green。后者,虽然通过new在栈中分配两个内存,但是执行c1=c时,c1指向了c在栈中内存,其原来指向的内存会被释放。c1和c指向的是同一个栈内存单元,所以对任何一个操作都会修改栈中的属性值。输出结果为5 green |