string 与 new string的区别,String str = "str"和String str = new String("str"),面试题

本文深入解析Java中的内存区域,包括栈、堆、常量池的作用与工作原理。详细阐述了基本类型变量、对象引用及new操作符在这些区域中的行为表现,以及常量池和堆在JVM中的角色。

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

两者与常量池,堆,栈的关系

基本类型的变量,对象:String str=“str”

  1. 在栈中创建str1的引用
  2. 去常量池中查看是否有相同Unicode编码的字符串常量。如果有将str1指向该常量,如果没有则创建一个内容为”str1”的字符串常量,将str1的引用指向该常量
  3. String str的内容"str"在常量池中唯一,假如String str 的内容改变,String str引用指向改变的新内容(新字符串常量)

new对象:String str=new String(“str”)

  1. 在堆中创建内容为“str1”的对象
  2. 在常量池中创建内容为“str1”的对象
  3. 每new一次会在堆中开辟一个新的空间存放对象

常量池:在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。

:堆内存用来存放由new创建的对象和数组
:栈内存中存放基本类型的变量和对象的引用变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值