不知道那位高手能够把解析一下下面为什么打印的结果不同。小弟不才,先谢谢大家先!! 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
}
String a="a";
String b =a+"b";
System.out.println(b=="ab");//false
String c ="a"+"b";
System.out.println(b=="ab");//true
}
编译时就会被当作 "ab" 处理,而:String b =a+"b";
编译时javac可猜不出a是个啥。结合String采用了享元技术,所以如此。楼主可以翻翻老帖子,也可以Google下。又不理解再探讨。
String b =a+"b";//因为有变量引入,在运行时,会创建一个新的字符串对象,所以此时 b=="ab" 不等
而 String c ="a"+"b";//常量字符串相连接 编译器直接优化成"ab"
所以此时 c=="ab" (楼主上面写的是 b=="ab,我觉得是不是写错了)
谢谢大家的支持!
避免不和你期待的那样
赞同这位兄弟的说法:String c = "a"+"b"//这是两个常量,编译器会优化成 String c ="ab",而String a="a";String b =a+"b";//有变量的引入,编译器不会优化,会产生新的对象。