根据上一个帖子,http://bbs.itheima.com/forum.php?mod=viewthread&tid=153546&page=1#pid1083772
因为看到有的朋友回复,现把调用代码加上,并且通过查看各位的回复也让我有更多的疑问,请各位朋友一起探讨
//对Car这类事物进行描述
class Car { //成员变量 String color = "red"; int num = 4; //成员方法 void show() { //临时变量 int num = 10; //输出临时变量的值 System. out.println("color = " +color +"...num = " +num); } } class CarDemo { public static void main(String[] args) { //通过new关键字,建立对象 //c就是一个类类型的引用变量,指向了该类的对象 Car c = new Car(); //对对象的属性进行修改 c. color = "black" ; //输出成员变量的默认值 System. out.println(c.num ); //通过对象.成员的形式来使用对象的功能 c.show(); } } 打印结果:
如上所诉,通过实例化对象调用show()方法,打印的num是局部变量的值等于10,如果要打印成员变量代码可改为this.num
问题1:当成员变量和局部变量同名时,如果输出打印的是num不是this.num,为什么会默认是局部变量的值,而不是成员变量的值?
问题2:从内存中地址来分析,可知道当实例化对象后, 成员变量num存在于堆内存中,show()方法也是在堆内存中,当调用show()方法时,局部变量num是存在于栈内存中,这是可以明确的,但看到有个朋友说是标签相同时,调用show()方法,局部变量的值会覆盖成员变量的值,这就已经回答了第一个问题,
我想请问,两个变量的内存地址不一样,为什么也可以覆盖?
|