前两个为false
最后的为true
这是因为JVM中的常量优化机制和==号的性质共同导致的
==号两端若是引用数据类型则比较的是地址值
基本数据类型则是比较数据值
先说最后的
String s2 = "ab" + "c";
在做赋值操作时;
此时JVM会创建一个new String("abc"),并将其放入方法区的常量池中
将常量池中的地址值赋给s2;
System.out.println("abc" == s2);
在调用时会先看常量池中是否有"abc",有的话就会将常量池中的地址值放入==号左端;
所以==号左右两端地址值相同就返回了true.
至于前两个
由于==号右边都是两个变量相加,在做运算时不会在常量池中去找,而是直接创建新的对象,新创建的对象的地址值和常量池中的地址值必然不同,所以返回false |