今天在论坛上看见一道这样的题目

一道邪恶的java基础题

String a = "abc";
String b = "abc";
System.out.println("====>"+ a==b );

请问输出结果是true还是false?虽然很基础,大家也都来试试吧!呵呵
 
这是原帖
我们看楼下的解释
2楼
答案是false,地址不相同,”==“是地址比较,equre是内容比较。呵呵~!初学者理解哦!!不对请指出!!谢谢了!
这个解释看上去没错
但事实是这样么?
我们看
上述程序结果确实是false
但是我们改一下程序
String a = "abc";
String b = "abc";
System.out.println("====>"+ (a==b) );
结果就为true
为什么呢?
很简单 运算符优先级问题
+号的优先级大于==
所以第一个程序先执行"====>"+ a 然后将这个结果与b进行==比较,所以地址就不再一样,返回false,而第2次先将a与b进行==比较,再与"====>"运算,所以为true
如果程序改成这样
String a = new String("abc");
String b = new String("abc");
System.out.println("====>"+ (a==b) );
那么这样的结果才是false
也是2楼的解释~
希望大家不要单纯看知识点,多结合实际问题,不要想当然