字符串常量和字符串对象区别

"本文探讨了Java中字符串对象和字符串常量的创建过程。对于字符串对象Strings1通过new关键字创建,它在栈中定义引用,在堆中分配内存,并可能引用常量池中的字符串。而字符串常量s2直接引用常量池中的"hello",避免了额外的内存分配。理解这两者的差异有助于优化内存使用和提高程序效率。"
摘要由CSDN通过智能技术生成

前言

String s1 = new String(“hello”);
String s2 = “hello”;
s1是字符串对象,s2和字符串常量,创建过程有何区别?

内存分配

字符串对象s1
栈中定义一个引用变量s1,堆中开辟一个内存空间,将堆内存空间的引用赋值给s1,“hello”是常量,去字符串常量池查看是否有“hello”字符串对象,没有的话分配一个空间存放hello,并且将其空间地址存入堆中new出来的空间中。

字符串常量s2
栈中定义一个引用变量s2,编译程序先去字符串常量池检查,是否存在“hello”,如果不存在,则在常量池中开辟一个内存空间存放“hello”;如果存在的话,则不用重新开辟空间。栈中s2存放的值为常量池中“hello”的内存地址(相当于指向常量池中的“hello”)
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值