A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何建华 黑马帝   /  2011-11-29 22:20  /  2402 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

付炯 黑马帝 2011-11-29 23:25:45
楼主
可以右键查看Insert函数的定义 可以看到这样一段话

  1. // 返回结果:
  2. //     此实例的一个新 System.String 等效项,但在位置 startIndex 处插入 value。
复制代码
亦即函数返回了一个新的指向 需要定义变量进行接收
回复 使用道具 举报
本帖最后由 何建华 于 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呢?

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 杨本国 于 2011-11-29 22:34 编辑

String类实际上表示的是一系列不可变的字符,无法直接修改给该字符分配的堆中的字符串,每次定义一个string字符串,系统都会为其分配内存空间!
  如果改成这样:   
                     str=str.ToUpper();
                                     str= str.Insert(0, " WORLD");
可能会达到效果了。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
str2=str.Insert(0, " WORLD");

            Console.WriteLine(str2);
回复 使用道具 举报
这就是C#中字符串的不可变性,要区分变量名和变量名指向的值的区别:
        str.ToUpper();
            str.Insert(0, " WORLD");之后str并没有指向它们,str还是指向hello,如果用str=str.ToUpper();
str=str.Insert(0, " WORLD");就可以了

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马