Java实例化对象时数据的存储

Java实例化对象时数据的存储

示例代码

以此代码进行存储过程的演示

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也发生了改变。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值