c# 编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量
但是这段代码:
using System;namespace Wrox.ProCSharp.Basics
{
    class MyFirstCSharpClass
    {
        
        static void Main()
        {
            string ttt;
            ttt = Console.ReadLine();
            Console.WriteLine(ttt);
            Console.ReadLine();
            return;
        }
    }
}其中仅仅声明了string 引用ttt ,并没有用new初始化string对象
为何也能通过呢??

解决方案 »

  1.   

    如果没有初始化变量,则按如下默认:
    string: ""或string.Empty
    int:0
    bool: false
    ...
      

  2.   

    string跟String不一样!前面需要编译器通过N次处理,优化!所有建议使用string基本类型,而非String...(听说地)
      

  3.   

    你把“ttt = Console.ReadLine();”拿掉试试
      

  4.   

    如果没有初始化变量,则按如下默认:
    string: ""或string.Empty
    int:0
    bool: false
    ...是这样吗?
    using System;namespace Wrox.ProCSharp.Basics
    {
        class MyFirstCSharpClass
        {
            
            static void Main()
            {
                int ttt;
                Console.WriteLine(ttt);
                Console.ReadLine();
                return;
            }
        }
    }
    就无法通过啊using System;namespace Wrox.ProCSharp.Basics
    {
        class MyFirstCSharpClass
        {
            
            static void Main()
            {
                int ttt=5;
                Console.WriteLine(ttt);
                Console.ReadLine();
                return;
            }
        }
    }就可以
      

  5.   

    ttt = Console.ReadLine();
    这不就赋值了么 自动初始化
    等价于
    string tt;
    tt="hello";
      

  6.   

    一楼说:
    如果没有初始化变量,则按如下默认:
    string: ""或string.Empty不是吧?????string 是默认为null的.
    "c# 编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量" 如果这么说,那后面的赋值语句 ttt = Console.ReadLine(); 就是可以看成对变量做的"初始化".
    前面你说的"引用"该变量, 是指读操作. 对内存变量进行写操作并不一定要求这个变量已经初始化过.
      

  7.   

    int ttt;
    Console.WriteLine(ttt);
    编译通过或不通过取决于默认配置文件,在VS.NET中,C#默认不允许这么做,但是可以通过改变配置和使用编译特性使这种语句可以正常编译运行.
      

  8.   

    sorry!
    我是说错了,string类型的默认是null,而不是"",只有值类型的才有默认的值,比如int默认为0.我没有说错的是如果string没有用变量初始化也是有值的,不过值是null.