.net - 在 .NET 中,字符串初始化为 null 的基本原理是什么?

标签 .net string initialization

我知道 String 是一个对象,而不是 Int,并且除非您创建对象,否则对象变量通常不指向任何内容。所以我知道它是如何工作的。

但是,就简单实用的编程而言,为什么 .NET 不将字符串初始化为空 (""),因为这肯定是字符串变量最常见的用途——作为字符串,而不是作为对象?

我从来没有(还)需要一个字符串为空,即“不是一个字符串”。这似乎是一个罕见的要求。我不能说 int 变量为空,那么为什么要使用字符串呢?将它作为一个选项无疑是必要的,但是当 int 等被赋予适当的初始值时,为什么 .NET 一开始就让它成为 null 呢?

我之所以这么问,是因为我不仅喜欢了解某些东西是如何工作的,而且还喜欢了解为什么,因为它减少了我对它看起来多么奇怪的咆哮的渴望。 :)

最佳答案

字符串未初始化为 null .您将初始化与声明混淆了。每当你声明一个变量时:

 Foo myFoo;

它从 null 开始,直到您实际调用它的构造函数。像这样:
Foo myFoo = new Foo();

现在传统上你不为字符串类调用构造函数,你用这样的字符串文字实例化它们:
string myString = "foo";

虽然有字符串类的构造函数,其中有一些,但它们都需要一些字符/字节数组来用于创建字符串。永远不会发生的是:
// initialize an empty string ("")
string myString = new string();

这是因为字符串类是 不可变 ,也就是说,一旦它被实例化,你就永远不能改变它,你只能创建一个新字符串并将变量设置为指向它(这就是为什么字符串类的所有方法都返回一个新字符串而不是改变你的调用方法)。所以实际上初始化为某个默认值是没有意义的,因为一旦你这样做了,你就会被它卡住。

关于.net - 在 .NET 中,字符串初始化为 null 的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7763118/

相关文章:

c# - 是否可以在运行时在不同的 Winform 项目上使用不同的配置文件?

c# - 将自定义类序列化为 XML

java - 有没有将字符串转换为标题大小写的方法?

C++ 初始化列表与赋值

在c中无法将int初始化为0

.net - 错误 NU1605 检测到软件包降级

c# - 在 Word Addin 中动态添加 RibbonButtons 会抛出 Collection is readonly

javascript - 如何将特定字符串的一部分从字符串替换为字符串?

java - 将 Object[] 数组转换为 String[] 数组 RxJava

java - 在枚举的构造函数中访问其他枚举