zoukankan      html  css  js  c++  java
  • 对于字符串类型的一些小理解

    Java代码:

    String s = "foo";  
    
    String s1 = "bar";  
    
    String s2 = s+ s1;  
    

    下面我们将这个代码编译成class文件,然后再反编译(可以用JAD),我们得到反编译后的代码是:

    Java代码:

    String s = "foo";  
    
    String s1 = "bar";  
    
    String s2 = (new StringBuilder()).append(s).append(s1).toString();  
    

     concat 肯定是有区别的。

    在性能上,从 concat() 源码可以看出,StringBuilder创建了更多的对象,而concat却没有,它使用的String类的内部实现。

    综上,当我们需要连接两个字符串的时候,我们应当优先考虑使用 concat() 函数,当我们需要连接字符串和其它类型的变量时,再考虑使用+运算符。

    还有关于api的查询

    public final class StringBuilderextends Objectimplements Serializable, CharSequence
    
    

    一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

    StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

    例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。

    通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x)sb.insert(sb.length(), x) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。

    StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。 

    构造方法摘要
    StringBuilder()
              构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。
    StringBuilder(CharSequence seq)
              构造一个字符串生成器,包含与指定的 CharSequence 相同的字符。
    StringBuilder(int capacity)
              构造一个其中不带字符的字符串生成器,初始容量由 capacity 参数指定。
    StringBuilder(String str)
              构造一个字符串生成器,并初始化为指定的字符串内容
  • 相关阅读:
    你没听过的乔布斯语录:苹果如果没这么独,可能更成功
    关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
    与调试器共舞
    libxml2.dylb 导致<libxml/tree.h> 老是找不到头文件
    国家气象局提供的天气预报接口(完整Json接口)
    dSYM 文件分析工具
    总结
    1-22
    【图论】
    好像要开始图论了....但搜索还剩了点....
  • 原文地址:https://www.cnblogs.com/LiTu233/p/10811841.html
Copyright © 2011-2022 走看看