示例代码
以此代码进行存储过程的演示
public class Task_010201_1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Car car = new Car();
car.brand="大众";
car.color="黑色";
car.show();
}
}
class Car {
String brand;
String color;
//无参构造方法
Car(){
}
void show() {
System.out.println("车辆品牌为:"+brand+",车辆颜色为:"+color);
}
}
图解
1.程序运行Car car 时,栈中发生的变化如下,car在初始情况下为空。而方法则指向方法区。
2.而在运行到 new Car() 时,系统将在堆内存中为car开辟空间,并将其地址存储到栈中
3.运行到 car.brand="大众";car.color="黑色"; 时,则将该信息也传入到了堆内存中。
4.运行到 car.show(); 时则调用方法实现输出。
误区
如果我们再实例化一个对象car2
Car car2 = car;
car2.brand= "benz";
car.say;
那么此时输出的结果还是car中的"大众"吗,答案是否定的,此时输出的将变成
车辆品牌为:benz,车辆颜色为:heise
其实通过上面的图解此时就很好理解了
Car car2 = car;
实际是将car2的地址也指向了car,即现在car和car2的地址是指向堆内存中的同一块儿的。所以即使是改变了car2下的brand,输出car时brand也发生了改变。