采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
JDK6+执行的情况: 老师说首先会在“常量池”创建一个对象“a”,看代码执行顺序,不应该是首先会在“堆中”创建一个对象"a"吗?(对应代码: String s = new String(“a”)) s.intern()时,按照老师说的,会创建堆中的引用放在常量池吧, 为什么s的引用传不过去,常量池的"a"不是后面才会执行的吗 ?听的不是很明白
当上述代码的类被JVM加载时,字面值常量 a 就会被加载到 String 常量池中(这是在编译阶段就确定了的常量字符串)。
感谢同学的热心协助,是的呢,所以new String("a")的时候"a"已经出现在常量池中,所以s=="a"是false,因为堆中会单独创建一个,但是如果s = new String("a") + new String("a"); s.intern() 由于常量池里没有"aa"只有"a",此时会把堆里的aa放到常量池里,因此s == "aa"是true
老师想问下,为啥 常量池里没有"aa"只有"a", 类被JVM加载时,字面值常量 aa 难道不会被加载到 String 常量池中吗? 感觉和字面值常量 a 没区别啊。
哇,我一看头像,还以为是我自己提了个问题:)JVM没有这么智能哈,它只会分析它看到的值,所以aa不会提前加载到字符串常量池中
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.7k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14