“执行语句 String str = new String("abc") 时,不管字符串池中是否存在"abc" ,直接新建一个字符串"abc"(注意:新建的字符串"abc" 不是在字符串池中),然后将其赋给str。”
百度上看到这段,有几个疑问:
1、之前认为new创建String对象时,会先判断常量池中是否存在"abc",如果有就不在常量池中创建"abc",没有就创建并返回给堆中的new String(),自己理解的和上端叙述有点出入,不知道哪个是对的。
2、“(注意:新建的字符串"abc" 不是在字符串池中)”,如果他是正确的,那么新建的"abc",是存在堆中的么?
java String类创建对象相关
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- danielinbiti 2016-04-29 14:08关注
字符串池中会创建,只是说new String()也同时会在堆中创建一个对象。 这个可以看jvm指令能说明的。 String s = new String("abc"); String s1 = new String("abc"); String s2 = new String("abc2"); 上面这三句话如果用javap转成jvm指令,s和s1会从同一个地址的常量池中取abc,而s2因为不是同一个字符串,地址和s和s1不同。侧面证明了不同常量值的地址不同,但是同一个字符串都是从同一个常量池中取值的 所以不再字符串池中创建这个说法目前来看站不住脚
解决 无用评论 打赏 举报
悬赏问题
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题