zoukankan      html  css  js  c++  java
  • (三)java字符串

    不可变字符串

    Java没有字符串类型,而是提供了一个预定义类String。

    java中的字符串是不可变字符串,因此无法更改某一个字符串变量的内容。

    优点:编译器可以让字符串共享。当复制一个字符串时,原始字符串和复制的字符串共享相同的字符。

    缺点:修改字符串时,需要通过修改字符串变量,让该变量引用另外一个字符串。这会降低运行效率。

    总结:程序中很少需要修改字符串,往往是对字符串进行比较。因此共享带来的高效率远远胜过提取、拼接所带来的低效率。

    字符串比较

    前面提到编译器可以让字符串共享,因此当两个字符串共享同一个字符时,可以使用==比较两个字符串变量。然而使用+或substring处理的字符串并不是共享的,因此必须使用equals方法比较。

    举例:

    public class main01 {
        public static void main(String[] args) {
            String s1 = "hello";
            String s2 = "hello";
         //以上s1,s2共享同一个“hello” String s3
    = s2+"";
    //s3使用另一个存储空间的“hello” System.out.println(s1
    ==s2); System.out.println(s1==s3); System.out.println(s1.equals(s3)); } }
    输出:  
    true
    false
    true

    构建字符串

    有时候需要由多个较短的字符串构建字符串,采用字符串连接的方式每次都要创建新的对象,效率很低。可以使用StringBuilder类解决。(多线程可以使用StringBuffer类)

    StringBuilder sb = new StringBuilder();
    sb.append("hello ");
    sb.append("world");
    String s = sb.toString();

    注意:StringBuilder和StringBuffer类相似,只不过StringBuffer适合多线程,保证线程安全。StringBuilder适合用在单线程,但速度更快。

  • 相关阅读:
    Cocos2d-x 3.0截屏功能集成
    游戏嵌入Webview网页
    Cocos2dx进阶学习之屏幕适配
    Android如何实现文件下载并自动安装apk包!!!
    LINQ Select变量定义 Expression<Func<TSource, TResult>>
    StringComparison枚举
    .net core DBFirst 生成Model表结构
    .net core反向工程Model生成 配置机密
    axios下载文件.net Core
    EFCore Database-first深入研究
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5953012.html
Copyright © 2011-2022 走看看