日期:2014-05-20  浏览次数:20701 次

不求包养但求解析???????????
不知道那位高手能够把解析一下下面为什么打印的结果不同。小弟不才,先谢谢大家先!!

  public static void main(String[] args){
String a="a";
String b =a+"b";
System.out.println(b=="ab");//false
String c ="a"+"b";
System.out.println(b=="ab");//true
}

------解决方案--------------------
两个都是false ==比较的是地址 equals()比较的是内容
------解决方案--------------------
我先吐槽下,楼主莫见怪:这个不算周经,也要算月经了。

String c ="a" + "b";
编译时就会被当作 "ab" 处理,而:

String b =a+"b";
编译时javac可猜不出a是个啥。

结合String采用了享元技术,所以如此。

楼主可以翻翻老帖子,也可以Google下。又不理解再探讨。
------解决方案--------------------
第二个输出应该是c=="ab"吧?
------解决方案--------------------
String a="a";
String b =a+"b";//因为有变量引入,在运行时,会创建一个新的字符串对象,所以此时 b=="ab" 不等
而 String c ="a"+"b";//常量字符串相连接 编译器直接优化成"ab"
所以此时 c=="ab" (楼主上面写的是 b=="ab,我觉得是不是写错了)
------解决方案--------------------
楼主那个c 好像没用上 是不是c=="ab"?