zoukankan      html  css  js  c++  java
  • CLR Via CSharp读书笔记(14):字符、字符串和文本处理

    数字类型与字符相互转换的三种技术:

    Casting: 最优效率,因为编译器产生IL指令来执行转换。C#允许开发者指明checked或unchecked代码以执行转换。

    使用System.Convert类型: 提供一些静态方法执行转换,所有这些方法以checked方式执行。抛出OverflowException异常。

    使用IConvertible接口: 最缺乏效率的技术,因为在值类型上调用接口方法会产生装箱。大多数类型显示实现接口方法,这意味着调用接口方法之前,必须将实例显示转换为接口。除了GetTypeCode之外的所有方法接受实现了IFormatProvider接口的对象引用,从而允许提供culture信息。抛出System.InvalidCastException异常。

    String s = "Hi" + " " + "there.";

    编译器在编译时连接所有文字常量,然后仅放置一个string对象在模块的元数据中。如果使用符号+连接非文字常量,连接发生在运行时,这会在垃圾回收堆上创建多个string对象。

    逐字字符

    // Specifying the pathname of an application
    String file = "C:\\Windows\\System32\\Notepad.exe";
    // Specifying the pathname of an application by using a verbatim string String file = @"C:\Windows\System32\Notepad.exe";

    immutable字符串提供了如下几个好处:
    允许在一个字符串上执行多个操作而没有改变该字符串
    immutable字符串同时意味着操作或者访问字符串时没有线程同步问题
    允许CLR仅通过一个string对象共享多份相同String内容 

    字符串留用

    执行序号(ordinal)相等性检查时,CLR快速测试两个字符串是否包含相同数量的字符。如果答案是否定的,字符串肯定不相等。如果答案是肯定的,CLR还需要比较每个单独的字符。

    执行需要注意语言文化的比较时,CLR始终都要比较所有单独的字符,因为两个字符串即使长度不同,也可能是相等的。

    虽然Intern方法本身比Equals方法块,但在使用Intern方法时,应用程序的总体性能可能变得更慢。这是因为所有字符串在添加到wordlist数组时,都要花时间对其进行留用。如果应用程序需要使用同一个wordlist来多次调用Intern方法,则该方法会对应用程序的性能和内存利用造成不利影响。这正是C#编译器默认不启用字符串留用功能的原因。

    字符串留用就是将字符串保存在一个哈希表里。

    字符串操作:

    String提供了许多用于处理字符串的静态方法和实例方法,如Insert, Remove, PadLeft, Trim, Concat等。使用这些方法时请牢记一点,他们返回的都是一个新的字符串对象。这是由于字符串是不可变的,已经创建,便不能被修改。

  • 相关阅读:
    MySQL-数据表操作
    MySQL基础命令
    Navicat 15激活
    禅道-启动失败问题整理
    python-开头的注释作用及区别
    SpringBoot、SpringCloud版本中GA/PRE/SNAPSHOT的详解
    mybatis的一些重要配置
    简历对应的知识点
    idea的破解
    SFTP和FTP的区别
  • 原文地址:https://www.cnblogs.com/thlzhf/p/2805453.html
Copyright © 2011-2022 走看看