String类

本文详细解释了Java中String字面量的特性,包括字符串池的概念、String实例化的方式及其对内存分配的影响。通过对比Stringa=newString(hello);和Stringb=hello;的内存操作,揭示了Java字符串处理的独特机制。

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

String类型的字面量和其他语言中的定义相同,但是需要注意的是String类型的字面量是用一个专门的“字符串池”来保存的,每次新建一个字符串的字面量,系统都会首先检查“字符串池”中是否已经存在该字面量,如果没有,则在“字符串池”中生成该字面量,如果存在则只需将该字面量的内存地址赋值给引用变量即可。

String a=new String("hello");和String b="hello";有很大的差别,前者是直接在开辟一个内存空间,其中保存的数据为字符串hello,同时申请一个引用变量a,将为字符串开辟的内存地址赋值给a;而对于后者,后台的操作是:首先查看“字符串池”中是否存在hello这个字面量,如果存在,则将该字面量的内存地址赋值给b,如果没有,则在“字符串池”中生成一个hello字面量,将新生成的字面量的内存地址赋值给b。另外,前者是在程序运行时,在内存开的空间,而后者是在程序编译时就为之开了内存空间。
String是一个很特殊的类,他作为函数参数传值的时候是值传递,而不是一般类那样引用传递。

void change(String a){
a="abc";
}
String b="xyz";
change(b);


这样在调用change函数前后b的值是不会变的,一直是"xyz"

String a = "abc";
String b = new String("abc");

这两个语句,前一个创建的字符串是放在“字符串池”里的。后一个并不是放在“字符串池”里的。所以用在执行上述语句第二句时,在“字符串池”内找不到字面量"abc" ,会新开辟一块内存。所以

a==b;
a.equals(b);


这两个语句第一个返回false,第二个返回true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值