首先伙伴们回答一下关于JavaString类在面试中经常遇到的问题 , 如果你能完全回答正确并且明白其实现逻辑 , 接下来的内容你可以忽略 , 跟你已经没有关系了 。 publicclassStringTest{publicstaticvoidmain(String[]args){//运行环境jdk1.8Strings1="a";Strings2="b";Strings3=s1+s2;Strings4="a"+"b";Strings5="ab";Strings6=s3.intern();//问:System.out.println(s3==s4);System.out.println(s5==s4);System.out.println(s6==s4);Stringstr1=newString("s")+newString("tr");Stringstr2="str";str1.intern();//问:如果25、26行代码交换位置输出结果是?如果将jdk换成1.6输出结果是?System.out.println(str1==str2);}}//请说出你的答案 , 评论区里见
解释字符串常量和串池的关系Strings1="a";//思考:程序运行到这行代码时实现了什么逻辑?通过javap-vmy.class命令反解析class文件 , 我们会看到下图1的两行指令 , 其中 , ldc#2是代表要去常量池的2号位置加载信息 , 此信息可以是一个常量也可以是一个对象的引用;astore_1是把加载好的信息存入到1号局部变量 , 如图2:
提示:javap是Javaclass文件分解器 , 可以反编译(即对javac编译的文件进行反编译) , 也可以查看java编译器生成的字节码 。 用于分解class文件 。
当程序运行的时候 , 会把字符串常量加载到运行时常量池 , 见图3 。 加载完成后这些常量还并不是java字符串对象 , 当程序执行Strings1="a"这行代码时 , 就会把s1变成字符串"a"的对象 。 同时会准备一块空间 , 也就是串池(stringTable) 。 初始化串池后就会把字符串"a"当做key , 去串池中查找是否已经存在 , 如果不存在就会把字符串"a"放入串池 , 如果存在就不放入 。
字符串变量拼接时jvm如何工作的?Strings3=s1+s2;//思考:执行这行代码时触发了哪些操作?【树袋熊|初级程序员必懂jdk1.6和1.8版本中关于String类面试官关心的问题】直接看图4反编译后的代码 , 我们会发现 , 按照图中执行的命令转换成Java代码其实就是下面的代码片段:StringBuilderb=newStringBuilder();b.append("a").append("b").toString();
//StringBuilder类的toString()方法publicStringtoString(){returnnewString(this.value,0,this.count);}总结:字符串变量拼接其原理就是调用了StringBuilder的append()方法 , 然后再调用StringBuilder的toString()方法 , StringBuilder的toString()方法底层实现是newString对象 。
System.out.println(s3==s5);//看到这里就应该知道结果了吧 , 是的没错就是:false//原因就是s3在已经在串池中而s5是在堆中 。 Jvm编译期优化Strings4="a"+"b";//此行代码在编译器会是如何执行的呢?
推荐阅读
-
那些借了钱就不提这茬的人是啥心理明明大家都是好朋友啊。
-
转账|独居男子深夜与美女网友聊天,被忽悠17次转账一万三千多!
-
若安说游戏|你的本命有调整吗?,王者荣耀6月2日更新:8位英雄进行调整
-
-
车家号|GT实拍图 新车将搭载2.5T发动机,起亚新款K5
-
多名女生称遭浙大努某某猥亵|多名女生称遭浙大努某某猥亵 具体什么情况?
-
-
#翡翠#闪瞎眼的三彩“福绿寿”“清代玻璃种”,谁敢买就是把12万扔水里!
-
中国经济网|北京石景山疑似病例曾到朝阳大悦城?商场:暂无信息
-
-
-
明明趣说|三木的“法式穿搭”太美了,利用黑白色就玩转时髦,真高级!
-
贾静雯|贾静雯瘦身到没一丝赘肉,瘦至97斤坦言没运动,自曝减肥法很简单
-
电竞幽默|LOL:Scout真的太想赢了!EDG拿下VG,阿布:我愿称他为李一炮!
-
小猫猫元正|最低距离仅有10米,附近居民很崩溃,房顶每天飞过上千架飞机
-
-
丹丹星座分享:会受到干扰,会失去自由,最不喜欢小孩的3星座
-
手机电池|手机放裤兜突然爆炸!女子大腿深二度烧伤!只因之前做了这事…
-
-
王国健|一句话喝退许褚张辽,曹操万军不敢上前,万人敌张飞的实力