zoukankan      html  css  js  c++  java
  • [面试经] Java

    String - Java语言中非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的Immutable类,被声明成为final class,所有属性也都是final的。也由于它的不可变性,类似拼接、剪裁字符串等操作,都会产生新的String对象。由于字符串操作的普遍性,所以有关操作的效率往往对应用性能有明显影响。

      String是Immutable类的典型实现,原生的保证了基础线程安全,因为你无法对它内部数据进行任何修改,这种便利甚至体现在拷贝构造函数中,由于不可变,Immutable对象在拷贝时不需要额外复制数据。

    StringBuffer - 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用append或者add的方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer本质是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来了额外的性能开销,所以除非有线程安全的需要,不然还是推荐使用它的后继者 - StringBuilder。

      StringBuffer的线程安全是通过把各种修改数据的方法都加上synchronized关键字实现的,非常直白。

    StringBuilder - 是Java1.5中新增的,在能力上面和StringBuilder没有本质区别,但是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选。

    应用场景

    【A】在字符串内容不经常发生变化的业务场景优先使用String,例如:常量声明、少量的字符串拼接操作等。如果有大量的字符串内容拼接,避免使用String与String之间的“+”操作,因为这样会产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。

    【B】在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程环境下,建议使用StringBuffer,例如XML解析、HTTP参数解析与封装。

    【C】在频繁进行字符串的运算,并且运行在但线程环境中,建议使用StringBuilder,例如SQL语句拼装、JSON封装等。

  • 相关阅读:
    win10 UWP button
    内网分享资源
    内网分享资源
    CF724F Uniformly Branched Trees
    win10 UWP FlipView
    win10 UWP FlipView
    win10 UWP FlipView
    搭建阿里云 centos mysql tomcat jdk
    搭建阿里云 centos mysql tomcat jdk
    win10 UWP 申请微软开发者
  • 原文地址:https://www.cnblogs.com/tingtwang/p/11132655.html
Copyright © 2011-2022 走看看