【发布时间】:2014-04-05 10:24:35
【问题描述】:
我想了解“Hello World”之类的字符串值存储在哪里或如何存储。
例如:
示例 1:
radLabel1.Text = "Hello";
radLabel2.Text = "Hello";
radLabel3.Text = "Hello";
示例 2:
string strTemp = "Hello";
radLabel1.Text = strTemp;
radLabel2.Text = strTemp;
radLabel3.Text = strTemp;
我知道第二种方法最有用,我正在这样做,但我想知道示例 1 的字符串是如何存储在 RAM 中的。我认为虽然它们是相同的,但在 RAM 中为它们创建了三个位置来存储它们。但是在示例 2 中,仅为示例 2 的字符串创建了一个位置,并使用其地址进行访问。我对吗 ?你能解释一下这个或在 RAM 中存储变量吗?
【问题讨论】:
-
字符串被保留,这就是您要查找的术语。在您的代码中,只有一份
"Hello"存储在内存中。见this wikipedia article。 -
字符串的几个字节不算什么,因为大多数机器都有很多 GB 的 RAM。如果你想优化你的程序,这里不是地方。另外,请阅读有关字符串实习的信息。见Why only literal strings saved in the intern pool by default?。您的第二个示例“最有用”的原因是,如果您想将
"Hello"更改为"Goodbye",您只需在一个地方进行。 -
字符串是 intern 的,即如果它们具有相同的值,则只有一个副本存储在内存中。对于 RAM 中的字符串,Why Hackers Love String Data Type 读起来很有趣。
标签: c#