请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

JDK6+执行的情况

JDK6+执行的情况:
老师说首先会在“常量池”创建一个对象“a”,看代码执行顺序,不应该是首先会在“堆中”创建一个对象"a"吗?(对应代码: String s = new String(“a”))
s.intern()时,按照老师说的,会创建堆中的引用放在常量池吧,
为什么s的引用传不过去,常量池的"a"不是后面才会执行的吗 ?听的不是很明白

正在回答 回答被采纳积分+3

1回答

沙龙腾01 2019-08-05 10:58:02

当上述代码的类被JVM加载时,字面值常量 a 就会被加载到 String 常量池中(这是在编译阶段就确定了的常量字符串)。


1 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    感谢同学的热心协助,是的呢,所以new String("a")的时候"a"已经出现在常量池中,所以s=="a"是false,因为堆中会单独创建一个,但是如果s = new String("a") + new String("a"); s.intern()  由于常量池里没有"aa"只有"a",此时会把堆里的aa放到常量池里,因此s == "aa"是true
    回复 有任何疑惑可以回复我~ 2019-08-05 15:05:13
  • 老师想问下,为啥
    常量池里没有"aa"只有"a",
    类被JVM加载时,字面值常量 aa 难道不会被加载到 String 常量池中吗?  感觉和字面值常量 a 没区别啊。
    回复 有任何疑惑可以回复我~ 2020-01-08 12:21:07
  • 哇,我一看头像,还以为是我自己提了个问题:)JVM没有这么智能哈,它只会分析它看到的值,所以aa不会提前加载到字符串常量池中
    回复 有任何疑惑可以回复我~ 2020-01-09 00:00:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信