快手(快手非常快) 之安卓开发岗 之java题目

  1. String、StringBuffer、StringBuilder的比较。好,那你给我说个需要使用StringBuffer的场景(囧),还真没想出来。。。 这个是java中的一个问题,然后对这个问题在各大论坛上查了一下。基础的情况和源吗就不说了。直到我看到这篇文章……

https://blog.csdn.net/m0_37589327/article/details/78605268

这里是将String类中的“+”和StringBuilder中的append方法在反编译后进行比较,得到结论String类中“+”在某些情况下不一定比StringBuilder中的append方法效率要低。咱先不论他效率低不低,但是String的“+”肯定会产生垃圾对象。

       有个众所周知的情况是:String对象是字符串常量,StringBulder类对象是字符串变量

String a="a";

String c=a+"c";

从而得到引用c指向的对象,这个过程相当于是先采用了new StringBuilder().append("a");  sb.append("c").toString();

和直接用StringBuilder a=new StringBuilder();a.append("a").append("c")很像,问题是当用第一种方法得到的字符串之后,a所引用的对象“a”存在于字符串常量池中,而很多情况下我们很有可能不会再使用String对象“a”,但是由于它的引用a存在,对象“a”不会被回收,占用内存,当然如果这类对象存在少的情况下,不会影响内存,但是如果大量使用效果就不一样了。其实很重要的一点是理解String类被定义为字符串常量的原因:是因为很多情况下对象被定义为String类方便。。。https://yq.aliyun.com/articles/372010

可以作为GC root对象:《深入理解Java虚拟机》一书中是这么说的,一下几种对象可以作为GC Root:

  • 虚拟机栈中的引用对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用对象
  • 本地方法栈中JNI引用对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值