遇到了这样一个面试题
String str = "hi," + "lao" + "wang";
String str2 = "hi,laowang";
System.out.println(str == str2);
输出结果如你所料,正是true
但是为什么会是ture呢
首先我们了解一下字符串,
众所周知,字符串就是一个不可变类,对它的任何操作,其实就相当于创建了一个新对象。
而我们的str不是天然可以进行+的运算的,这就是jvm对其的优化
通过jvm的优化
我们刚才的语句其实就等价于String str = “hi,laowang”;
就是只创建出一个对象,将对象放入堆中。
我们的str2就直接在堆中拿到这个对象的引用,所以两者引用的地址
所以str和str2才会等同于一个地址。