• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

黄文超

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

java创建对象时候内存的分配

java创建对象时候内存的分配

首先,我们来看一段java代码

public class Demo1 {
	public static void main(String[] args) {
		Book b1 = new Book();
		b1.name = "悲惨世界";
		b1.price = 99;
		b1.say();
		
		Book b2 = b1;
		b2.say();
	}
}

class Book {
	int price;
	String name;
	public void say() {
		System.out.println("名字叫《" + name + "》的书的价格为:" + price);
	}
}

在这段代码中,我们创建了b1对象,然后又有这么一句话Book b2 = b1;

那么这一句话是重新开辟了一块内存空间还是赋值地址给b2呢?接下来我们具体分析一下:

1、在栈内存中创建一个名为b1,类型为Book的变量,初始值为null;

2、在堆内存中创建一个对象实例,并把地址赋值给b1;

3、

b1.name = "悲惨世界";

b1.price = 99;

​ 这两句话是给堆内存中的对象赋值

4、然后下一句话就是在栈内存中创建一个名为b2,类型为Book的变量,初始值为null,接下来再把b1的地址赋值给b2

5、最后一句话就是调用地址为 堆内存中地址为0X1234的方法了。

经过上面的分析我们就可以得出结论:Book b2 = b1;其实就是把b1的地址赋值给了b2,并没有在堆内存中新开辟一个对象空间

posted on 2021-03-11 09:48  黄文超  阅读(81)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3