您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
1024 发布于2020年11月23日 19:01 最近更新于 2020年11月24日 10:20

原创 一、字符串常量Java内部加载

220 次浏览 读完需要≈ 2 分钟 面试

内容目录

问:下图1、2的结果分别是什么?

527695-20201123185355760-1776914244.png
527695-20201123185355760-1776914244.png

答:1=true、2=false。

String:intern()是一个本地方法,它会查找字符串常量池中具有相同内容的String常量对象,如果没有找到,则将自身包含的字符串添加到常量池中,并返回此String对象的引用。因此第一次调用"alibaba".inetrn()会把"alibaba"字符串对象添加至常量池,并返回该对象的引用,图1的判断换过来说就是同一个引用对象在进行对比,所以返回true。

图二的重点在于这里其实是两个不同的引用对象在判断。Java程序在启动的时候会加载类sun.misc.Version,该类有一个属性值为java的字符串会被添加进常量池中。因此在调用str.intern()方法时,由于常量池中已经存在java的引用对象,所以是两个不同的引用对象在进行判断,结果为false。
如果图一处再增加new String("alibaba")==str1.intern()的判断,和图二同样的道理,结果为false。

  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论