java中String的内存分析

本文解析了Java中String变量str1和str2通过不同方式实例化的区别。str1使用字符串字面量的方式可能创建或复用String池中的对象,而str2使用new关键字则至少创建一个新对象,并可能填充String池。

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

String str1="ABC"和String str2 = new String("ABC") 的区别。
String str1="ABC" 可能创建一个对象或者不创建对象,
	如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
具体点:
	String s = new String("a");创建2个对象,一个是“a", 一个是”new String("a)“
Class被加载时,"a"被作为常量读入,在常量池(constant pool)里创建了一个共享的值为"a"的String对象;然后当调用到new String("a")的时候,会在堆(heap)里创建这个new   String("a")对象;②由于常量池(constant pool)中存在"a"所以不再创建"a",只创建new String("a")。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值