<pre name="code" class="html">public class StringDemo{
private static final String MESSAGE="taobao";
public static void main(String [] args) {
String a ="tao"+"bao";
String b="tao";
String c="bao";
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
/*这个题目涉及到的是编译器的优化问题,在编译器编译过程中 变量a已经被编成了taobao放在了堆中,但B+C不会被优化。所以堆中的有taobao、tao、bao三个变量。针对b+C用的
是StringBuffer来处理的。意思就是 b.append的另一个bao。那结果肯定不一样了
如果改成<pre name="code" class="plain">System.out.println((b+c).intern==MESSAGE);
的话,输出的就为true这个intern的意思就相当于在堆中找一下有没有taoabo这个字符串,如果有,就相等了。
本人初学。如有错误,还请指教 */
<span style="font-family: Arial, Helvetica, sans-serif;">ps:<span style="color: rgb(102, 102, 102); font-family: arial, STHeiti, "Microsoft YaHei", 宋体; font-size: 14px; line-height: 28px;">String str=new</span><span style="font-family: arial, STHeiti, "Microsoft YaHei", 宋体; font-size: 14px; line-height: 28px; color: rgb(51, 51, 51);"></span><span style="color: rgb(102, 102, 102); font-family: arial, STHeiti, "Microsoft YaHei", 宋体; font-size: 14px; line-height: 28px;"> String("hello");这句实际上是在堆内存中新建了2个对象,地址不一样,而在比较引用型变量时,==用来比较地址,所以返回false</span></span>
</pre><pre code_snippet_id="1845219" snippet_file_name="blog_20160822_12_2554830" name="code" class="plain">
</pre><pre code_snippet_id="1845219" snippet_file_name="blog_20160822_12_2554830" name="code" class="plain">
</pre><pre>