Android面试题——java基础:String各种方式创建时,做==运算结果

  • 先看结果后分析
		String s1 = "MileIsGoodBoy";//在常量池中
        String s2 = new String("MileIsGoodBoy");//堆中
        String s3 = "MileIs";//常量池中
        String s4 = "GoodBoy";//常量池中
        String s5 = "MileIs" + "GoodBoy";//常量池中
        String s6 = s3 + s4;//等于new在堆中
        System.out.println(s1 == s2);//结果false 情况一
        System.out.println(s1 == s5);//结果true  情况二
        System.out.println(s1 == s6);//结果false 情况三
        System.out.println(s1 == s6.intern());//结果true 情况四
        System.out.println(s2 == s2.intern());//结果flase 情况五
  • String的两种创建方式
String s1 = "mile";
String s2 = new String("mile");

我们先来看下这两种创建方式的区别,s1直接是使用字符串加双引号创建的,s2是通过new了一个String对象来创建的,我们都知道new一个对象都是放到堆里面的,而s1直接用字符串加双引号是一个常量,是放到方法区的常量池里的。一次他们位置不同,

好了我们来分析下上面物种情况
情况一:根据String的两种创建方式,我们知道两个String不是一个对象,s1在方法区中的常量池中,而s2是new出来的在堆中。所以他们不是一个对象结果是false

情况二:String s5 = “MileIs” + “GoodBoy”;都是用双引号相加的情况下就是在常量池中,所以结果是true

情况三:String s6 = s3 + s4;//等于new在堆中 所以与常量池中的不是一个对象,所以结果是true

情况四:s6.intern() 是返回s6在常量池中对应的值,所以结果是true

情况五:堆中的字符串与自己常量池中的值对比。肯定是false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值