本文重点介绍创建对象和使用对象的内存分配问题,我尽量用简单的方法帮助大家理解new语法背后的内存逻辑。
我们来先介绍两个概念:
概念是抽象的,不是很好理解,接下来通过一个具体的小案例,来揭开内存分配的神秘面纱。假如我们要设计一个图书管理系统,因此需要创建一个图书类
public class Book {
String bookName; //书名
Integer price; //价格
public void lendBook(){
System.out.println("借书成员方法");
}
}
?当我们使用new创建一个对象时,内存中会进行如下3步操作:? ? ?
? ? ? 1)使用new创建对象,在堆内存中申请Book类的内存空间
? ? ? 2)栈内存中存放类在堆内存的首地址
? ? ? 3)变量就是栈内存地址的别名
我们借助一小段代码,来展示内存变化逻辑,请看下图
由于栈内存和堆内存的原理不同,接下来对比一下,变量赋值与对象赋值之间的区别
当b=a;book1=book;之后分别修改b和book1的值,观察a和book的变化。
运行结果截图
/******************************************************************************************
* 需要Java学习资料和项目外包信息的小伙伴,可以关注我的公众号【码农充电站】或者联系我的微信
* 公众号:码农充电站
* 作者微信:it1529577
*****************************************************************************************/
?
SpringMVC上传文件的简单实例 在使用springMVC进行系统实现时,springMVC默认的...
整除 ASP(VBScript) 中整除用“\”,比如 m = 5 \ 2,结果为 2。 取余 ASP(VBScr...
1.人最大的困难是认识自己,最容易的也是认识自己。很多时候,我们认不清自己,...
下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ ...
Windows 10是微软公司最闪亮的操作系统之一。在Windows时代,Windows 10是最成功...
前言 在这里,我们将尝试去学习一下 .net core EF Core 中调用存储过程。 我们知...
本文转载自微信公众号「dongfanger」,作者dongfanger。转载本文请联系dongfange...
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分...
一.基于ASP的文件上传实现原理分析 基本原理是:采用ADO Stream对象的BinaryRea...
作者?| ?阿里文娱技术专家 草薰 责编 | 夕颜 出品 | CSDNID:CSDNnews 背景 近年...