Java内存分配及equals和==号的详细讲解

本文详细阐述了Java内存的堆、栈、数据段和代码段的分配,强调了new创建的对象存储在堆中,局部变量存储在栈中。通过示例代码解释了Object类的equals()方法,指出默认equals()比较的是内容和内存地址,需要根据需求重写。同时,对比了equals()和"=="的区别,说明"=="比较的是对象内容和内存地址,举例说明了字符串在内存中的不同存储方式导致的不同比较结果。最后,指出了"=="在基本数据类型比较和反射中的应用。
摘要由CSDN通过智能技术生成

从图中我们可以很清晰的看出,程序通过加载器从硬盘中加载到内存中,并且保存到不同的位置,通俗的说就是new出来的东西存放在heap(堆区),局部变量存放在stack(栈区),静态变量和字符串常量存放在data segment(数据段)中,逻辑代码存放在code segment(代码段)中

通过下面的代码来解释变量存放的位置:

class A{
	
	private int id;
	
	public A(){
		
	}
}

public class MyJVM {

	public static void main(String[] args) {
		
		A a = new A();
		/**
		 * 这句代码的含义:
		 * 1.a本身的内存是在栈区分配的,属于局部变量
		 * 2.new A() 是指在堆区动态分配一块区域,当做A的对象
		 * 3. a = new A() 表示堆中的内存赋给了a
		 * 4. 所以a指向了堆中的一块内存,所以可以理解为a代表了堆中的一块内存
		 *
		 */

	}

}

理解了上面的内存分配下面我们来探讨一下equals()方法:

Object类的equals()方法简介:

1:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值