2016-08-22-java-堆和栈的一道题

<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值