Java中的堆内存与栈内存 equals()和==的区别

本文深入探讨了Java中的内存管理概念,包括堆内存与栈内存的区别,以及它们如何影响对象和基本类型变量的存储。此外,还详细解析了字符串比较中equals()与==的区别,帮助读者理解字符串在内存中的存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、堆内存与栈内存

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。

在Java代码,常常会使用到这样的类的声明实例化:

Person per = new Person();

这其实是包含了两个步骤,声明和实例化:

Person per = null; //声明一个名为Person类的对象per

per = new Person(); // 实例化这个per对象

  声明指的是创建类的对象的过程;

  实例化指的是用关键词new来开辟内存空间。

在这里插入图片描述

字符串比较equals()和==的区别

equals()方法比较原理:
在这里插入图片描述

equals():检查组成字符串内容的字符是否完全一致

==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象。



public class StringDemo {

 	
	 public static void main(String[] args) {

			String str1 = "Hello";

       
			String str2 = new String("Hello");

       
			String str3 = str2; // 引用传递

       
			System.out.println(str1 == str2); // false

       
			System.out.println(str1 == str3); // false

       
			System.out.println(str2 == str3); // true

       
			System.out.println(str1.equals(str2)); // true

       
			System.out.println(str1.equals(str3)); // true

       
			System.out.println(str2.equals(str3)); // true

 

         }

 

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值