通过Java字节码发现有趣的内幕之String篇(一)
很多时候我们在编写Java代码时,判断和猜测代码问题时主要是通过运行结果来得到答案,本博文主要是想通过Java字节码的方式来进一步求证我们已知的东西。这里没有对Java字节码知识进行介绍,如果想了解更多的Java字节码或对其感兴趣的朋友可以先阅读 字节码基础:JVM字节码初探 。 String字面量可以通过'=='判断两个字符串是否相同,是因为大家都知道'=='是用来判断两个对象的值引用地址是否一致,两个值一样的字符串字面量定义是否指向同一个值内存地址呢?答案是肯定的。 package com.jaffa.test.string; public class ConstPoolTest { public static void main(String[] args){ String str1 = "strVal_1"; String str2 = "strVal_1"; //print str1==str2 is true System.out.printf("str1==str2 is %b",str1==str2); } } 代码中声明了str1和str2的字面量值都为strVal_1,并且打印出str1==str2为true,说明两个str1和str2变量同时指向同一个字符串常量值的内存地址,下面通过Java字节码来验证这个结果。