不知道那位高手能够把解析一下下面为什么打印的结果不同。小弟不才,先谢谢大家先!!        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
}

解决方案 »

  1.   

    两个都是false   ==比较的是地址    equals()比较的是内容
      

  2.   

    我先吐槽下,楼主莫见怪:这个不算周经,也要算月经了。String c ="a" + "b";
    编译时就会被当作 "ab" 处理,而:String b =a+"b";
    编译时javac可猜不出a是个啥。结合String采用了享元技术,所以如此。楼主可以翻翻老帖子,也可以Google下。又不理解再探讨。
      

  3.   

    String a="a";
    String b =a+"b";//因为有变量引入,在运行时,会创建一个新的字符串对象,所以此时 b=="ab" 不等
    而 String c ="a"+"b";//常量字符串相连接 编译器直接优化成"ab"
    所以此时 c=="ab" (楼主上面写的是 b=="ab,我觉得是不是写错了)
      

  4.   

    楼主那个c 好像没用上  是不是c=="ab"?
      

  5.   

    已经遗忘了用==来比较String了
      

  6.   

    不好意思因为心急 写错了  是c=="ab" 
    谢谢大家的支持!
      

  7.   

    我觉得反正碰到String就用equals好了,
    避免不和你期待的那样
      

  8.   


    赞同这位兄弟的说法:String c = "a"+"b"//这是两个常量,编译器会优化成 String c ="ab",而String a="a";String b =a+"b";//有变量的引入,编译器不会优化,会产生新的对象。