String a="hello";
String b="he";
String c="llo";
String d=b+c;
System.out.println(a==d);
System.out.println(a=="he"+"llo");
第一个是false,第二个是true,请问下原因,一直很困惑
String b="he";
String c="llo";
String d=b+c;
System.out.println(a==d);
System.out.println(a=="he"+"llo");
第一个是false,第二个是true,请问下原因,一直很困惑
这么说吧楼主:System.out.println(a==d);这句话,你给定义了一个String 类型a并赋值hello到a,在java里,就新建了一块空间,并将hello放到了!a空间中的字符串池中。
而d和的原理一样。
但是System.out.println(a=="he"+"llo");这句就不一样了!这里你只新建了a的空间,并没有新建"he"+"llo"的空间。故此,你在用a和"he"+"llo"进行比较,默认java就认为你们是在相同的字符串池里,故此空间地址相同,字符值也相同。
你所掌握的只能是当前的情况,以后难免会发生变化。龙四有个Blog有个很好的扫盲贴,楼主可以看看,深入分析字符串连接最后编译的字节码:http://www.ticmy.com/?p=69
这是因为定义String a="Hello"的时候内存分配有稍许不同,是存放在常量池中,先查找字符串常量池中是否有“Hello”这个常量,没有则在字符串常量中创建; 当执行b时,由于常量池中已有“Hello”字符串,所以将b直接指向字符串常量“Hello”,这样,a和b就是指向同一个对象。