黑马程序员技术交流社区
标题:
为什么输出是“hello”?
[打印本页]
作者:
何建华
时间:
2011-11-29 22:20
标题:
为什么输出是“hello”?
本帖最后由 何建华 于 2011-12-8 09:42 编辑
在网上看到一道题目,代码如下:
namespace ChangesOnString
{
class Program
{
static void Main(string[] args)
{
String str = "hello";
str.ToUpper();
str.Insert(0, " WORLD");
Console.WriteLine(str);
}
}
}
不理解,怎么会是hello呢?
作者:
杨本国
时间:
2011-11-29 22:29
本帖最后由 杨本国 于 2011-11-29 22:34 编辑
String类实际上表示的是一系列不可变的字符,无法直接修改给该字符分配的堆中的字符串,每次定义一个string字符串,系统都会为其分配内存空间!
如果改成这样:
str=str.ToUpper();
str= str.Insert(0, " WORLD");
可能会达到效果了。
作者:
杨楠
时间:
2011-11-29 22:46
str2=str.Insert(0, " WORLD");
Console.WriteLine(str2);
作者:
付炯
时间:
2011-11-29 23:25
可以右键查看Insert函数的定义 可以看到这样一段话
// 返回结果:
// 此实例的一个新 System.String 等效项,但在位置 startIndex 处插入 value。
复制代码
亦即函数返回了一个新的指向 需要定义变量进行接收
作者:
谭显锋
时间:
2011-11-30 09:35
这就是C#中字符串的不可变性,要区分变量名和变量名指向的值的区别:
str.ToUpper();
str.Insert(0, " WORLD");之后str并没有指向它们,str还是指向hello,如果用str=str.ToUpper();
str=str.Insert(0, " WORLD");就可以了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2