zoukankan      html  css  js  c++  java
  • 关于String的一些理解

    1.String、StringBuilder and StringBuffer 的区别:

    <1>.  String:字符串常量。在进行字符串拼接时,会在每次累加的时候都重新分配内存空间,并且使用C#的垃圾处理机制回收上次分配的内存空间。如果要修改字符串而不创建新的对象则可以使用。

    <2>.StringBuilder:字符串变量(非线程安全)。可以在创建的时候给它分配内存空间的大小,如果实际超出则它的容量会自动翻倍增加。

            优点:不需要每次都去分配内存空间,所以系统就没有必要去处理垃圾回收。当需要对一个字符串进行多次操作时,它的效率远远高于String。

            缺点:线程不安全。如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用或者变量的内容不断变化,那么最好用StringBuffer。

            区别:StringBuilder 与 String 的不同之处就在于,StringBuilder 可以显示的设置分配内存的大小,而 String 只能根据你初始化时的字符串的大小由系统分配足够的内存。

    <3>.StringBuffer:字符串常量(线程安全)。与StringBuilder相同只是它是多线程安全的。StringBuffer 线程安全的可变字符序列。类似于 String 的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。由于StringBuilder不执行同步,所以StringBuffer效率低于StringBuilder。

    2.string s=""  与 string s=null的区别:

    <1>. string s="":将值类型的空字符串赋值给s。这是局部变量s分配在栈空间上,这时是占用栈空间的,而且还需要占用托管堆中的空间来初始化这个局部变量s。空字符串是不包含字符的 System.String 对象的实例。在各种编程方案中经常会使用空字符串表示空白文本字段。可以对空字符串调用方法,因为它们是有效的 System.String 对象。

    <2>.  string s=null:将引用类型的空引用赋值给s。null没有实例化变量。局部变量s分配在栈空间上,这时是占用栈空间的,而没有对s进行初始化,所以并没有占用托管堆中的空间。null 字符串并不涉及 System.String 对象的实例,任何对 null 字符串调用方法的尝试都会生成 NullReferenceException。但是,可以在串联和比较操作中将 null 字符串与其他字符串一起使用。

    拓展:引用类型与值类型的区别  以及  堆和栈的区别

    引用(指针)是分配在栈上面的
    引用指向的内容 是在堆上的
    所以一个字符串的空引用 应该在栈上。

  • 相关阅读:
    结对-结对编项目作业名称-测试过程
    团队-团队编程项目作业名称-代码设计规范
    《团队-团队编程项目作业名称-项目总结》
    课后作业-阅读任务-阅读提问-4.
    课后作业-阅读任务-阅读提问-4
    课后作业-阅读任务-阅读笔记-4
    个人编程作业2
    团队编程项目作业6-程序维护
    团队-象棋游戏-项目总结
    团队编程项目作业6-程序维护
  • 原文地址:https://www.cnblogs.com/qqxiongmao/p/2969148.html
Copyright © 2011-2022 走看看