zoukankan      html  css  js  c++  java
  • Java中的字符串

    String:这是一个不可变类,现使用现创建,适用于少量的字符串操作的情况

    StringBuilder:可变类,速度快、线程不安全,适用于单线程下在字符缓冲区进行大量操作的情况

    StringBuffer:可变类,速度慢、线程安全,适用多线程下在字符缓冲区进行大量操作的情况

    缓存池:

    String 类有一个对应的 String 池,也就是 String pool。每一个内容相同的字符串对象都对应于一个 pool 里的对象。

    这里涉及到等价性的问题,有几个地方需要特别注意

    1.初始化

    String s = "xxx" 这种形式,如果缓存池中没有,则在缓存池和堆里分别创建一个,然后让s指向缓冲池中的那个。如果有,就让它指向缓存池中的那个,不在堆中新建对象。

    String s = new String("xxx")这种形式,一定会在堆中新建一个,如果缓存池中没有,就在缓冲池里创建一个,但是指向的仍然是堆中那个。

    例:

    String s = new String("abc");  
    String s1 = "abc";  
    String s2 = new String("abc");  
    System.out.println(s == s1);  
    System.out.println(s == s2);  
    System.out.println(s1 == s2);  
    //结果是false false false

    2.intern()方法

    寻找对应内容的缓冲池中的那个对象

    例:

    String s = new String("abc");  
    String s1 = "abc";  
    String s2 = new String("abc");  
    System.out.println(s == s1.intern());  
    System.out.println(s == s2.intern());  
    System.out.println(s1 == s2.intern());
    //结果是false false true

    3.字符串拼接

    用+运算符生成新字符串时,如果加号两边都是字面值,则会去寻找缓冲池的对象,如果找到会返回这个对象。

    否则,直接创建一个新对象。

    String hello = "hello";  
    String hel = "hel";  
    String lo = "lo";  
    System.out.println(hello == "hel" + "lo");  
    System.out.println(hello == "hel" + lo); 
    //结果是true false
  • 相关阅读:
    扫描指定ip的端口(C#)
    C# 调用Delphi dll
    MuleSoft系列(五)-使用Anypoint Studio从RAML文件创建RESTful API接口
    MuleSoft系列(四)-用Anypoint Studio创建一个Mule应用程序
    MuleSoft系列(三)- 使用API设计器通过RAML定义API
    MuleSoft系列(二)- 使用Flow Designer创建Mule应用程序
    MuleSoft系列(一)
    Docusign系列(四)
    Docusign系列(三)
    Docusign系列(二)
  • 原文地址:https://www.cnblogs.com/hyfer/p/11079884.html
Copyright © 2011-2022 走看看