笔试面试注意点

记录一些笔试,面试中常常问到的问题吧:

1、String

情景一

String s1 = new String("abc");

String s = "abc";

String s2 = new String("abc");

问题:以上三句分别产生了几个对象。

分析:s1、s、s2分别为引用,换句话说,可以认为他们不是对象。

第一句话,产生了2个对象,首先会在string pool中查找是否有"abc"这个对象,如果没有则建立一个,第一个对象,位于string pool中的“abc”对象,new String("abc")在string pool中找到"abc"对象后,在java的堆区产生一个“abc”对象,产生第二个对象。s1地址指向java堆区的“abc”对象

第二句话:会去string pool中寻找,因为第一句话中已经产生了"abc"对象,那么将不再产生对象,s指向string pool中的“abc”对象

第三句话:先在string pool中查找到"abc"对象,然后在java堆区产生一个新的"abc"对象,产生一个对象,s2指向这个新的"abc"对象

情景二

String s = "hello";

String s1 = "he";

String s2 = "llo";

问题:

s == "he"+"llo"?

s == "he"+s2;

分析:

第一:返回true,因为如果"+"号两边都为常量值,那么拼接起来后依旧指向string pool中的"hello"。

第二:返回false,因为如果“+”号有一边为常量值,一边不是常量值的话,会在java堆区产生一个新的对象

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值