none
string.Empty和""到底有没有区别? RRS feed

答案

  • 你好,string.Empty 与 “” 是一样的,同时也分配了空间,可以说没有区别。主要使用情景是使用string.Empty代码跟容易阅读,“”有点硬编码的感觉。
    2009年12月9日 11:01
    版主
  • 使所有字面量“”指向同一个对象是由虚拟机或是CLR来完成的,它并非语言的特性。而且开发者可以绕开这个特性,因此我觉得“”在遇到某些情况时也可能不会指向同一个对象,因此这一点并不稳定。
    如果使用String.Empty则不存在此问题。
    另外,一个字面量“”的出现意味着检查一遍字符串池等逻辑,效率比String.Empty低。
    2009年12月9日 8:42
  • 你好!
         实际上Empty在string类中就是一个静态的只读字段,他的定义是这样的:
         public static readonly String Empty = "";
         实际上这个字段就是初始化成""的,使用其他除了Empty需要访问一下字段以外,没有什么本质区别了!
         使用string.Empty可以让你的代码更加易读!
    周雪峰
    2009年12月9日 11:24
    版主

全部回复

  • 你好!

    String. Empty 源代码如下。从下面的代码也能清楚的看到二者的区别。

    public sealed class String
    {
    public static readonly String Empty = "";
    }

    知识改变命运,奋斗成就人生!
    2009年12月9日 6:21
    版主
  • string.Empty 不分配存储空间
    "" 分配一个长度为空的存储空间

     在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用。
    使用时没区别,


    努力+方法=成功
    2009年12月9日 6:23
  • 开心 能否解释一下

    string.Empty 不分配存储空间
    "" 分配一个长度为空的存储空间
    2009年12月9日 7:42
  • string是引用类型,
    在使用时在内存中为其分配地址,

    不分配存储空间也就是在内存中不为其分配地址,
    如果你对C++比较熟的话,这点应该能更好的理解


    努力+方法=成功
    2009年12月9日 7:52
  • 原则上,任何字面量都会由编译器为其创建一个对应的对象。
    但实际上,Java和.NET都为字符串做了特殊处理,这两种语言里都有一个字符串池,当字符串池中存在值相同的字符串时,不会创建新的对象。
    2009年12月9日 7:59
  • string.Empty同样是引用类型,同样要在内存中分配存储地址



    这倒不是字符串驻留不驻留的问题。字符串驻留相当于为不相同的字符串对象实现了“单例模式”


    2009年12月9日 8:07
  • 如果“”和String.Empty在内存里对应的是同一个对象,那它们之间还能有什么差别呢?
    2009年12月9日 8:09
  • 如果“”和String.Empty在内存里对应的是同一个对象,那它们之间还能有什么差别呢?

    我也认为没差别,但是
    1。既然"" 就是 string.Empty,那么string.Empty存在的意义是什么?
    2。我接触的大多数人认为他们之间有差别,差别就在string.Empty不分配存储空间,而""分配一个存储空间
    2009年12月9日 8:18
  • 使所有字面量“”指向同一个对象是由虚拟机或是CLR来完成的,它并非语言的特性。而且开发者可以绕开这个特性,因此我觉得“”在遇到某些情况时也可能不会指向同一个对象,因此这一点并不稳定。
    如果使用String.Empty则不存在此问题。
    另外,一个字面量“”的出现意味着检查一遍字符串池等逻辑,效率比String.Empty低。
    2009年12月9日 8:42
  • 你好,string.Empty 与 “” 是一样的,同时也分配了空间,可以说没有区别。主要使用情景是使用string.Empty代码跟容易阅读,“”有点硬编码的感觉。
    2009年12月9日 11:01
    版主
  • 你好!
         实际上Empty在string类中就是一个静态的只读字段,他的定义是这样的:
         public static readonly String Empty = "";
         实际上这个字段就是初始化成""的,使用其他除了Empty需要访问一下字段以外,没有什么本质区别了!
         使用string.Empty可以让你的代码更加易读!
    周雪峰
    2009年12月9日 11:24
    版主