在C#中,为什么在声明int时不使用'new'关键字?

时间:2013-03-21 23:49:12

标签: c# int

声明int ..

int A = 10;

为什么不这样做呢?

int A = new Int()
A=10;

都是一样的吗?

5 个答案:

答案 0 :(得分:10)

因为intInt32的语法糖,因为它是一种值类型。顺便提一下,常量值10value type Int32的实例)也是如此。这就是为什么您不需要使用new来创建新实例,而是制作10的副本并将其称为A。类似的语法也适用于引用类型,但区别在于没有复制;创建了一个引用。

基本上,您可以将10视为先前声明的Int32实例。然后int A = 10只是将变量A设置为值10副本(如果我们在谈论reference types那么A将被设置为对实例的引用而不是副本)。

为了更好地说明这里的另一个例子:

struct SomeValueType {
    public SomeValueType(){        
    }
}

public static readonly SomeValueType DEFAULT = new SomeValueType();

然后你可以这样做:

SomeValueType myValueType = DEFAULT;  // no neeed to use new!    

现在假设SomeValueTypeInt32DEFAULT10。它就在那里!

答案 1 :(得分:7)

你可能已经看过Java,其中intInteger是两个不同的东西,后者要求你写new Integer(10)

在C#int中是Int32的特殊别名,并且出于所有意图和目的,它们是相同的。实际上,要创建任何类型的新实例,您必须编写new Int32()或其他内容。

但是,因为整数是C#(和大多数编程语言)中的原始类型,所以整数文字有一种特殊的语法。只需撰写10即可Int32(或int)。

在您的示例中,您实际上是为a变量赋值两次:

int a = new Int32();  // First assignment, a equals 0
a = 10;               // Second assignment, a equals 10

您可能会想到,由于第二个分配会覆盖第一个分配,因此不需要第一个分配。

答案 2 :(得分:7)

在C#中有两种类型,“引用类型”和“值类型”。 (指针是第三种类型,但我们不能进入。)

当您使用值类型的默认构造函数时,您所说的只是“给我这个值类型的默认值”。因此,new int()既不仅仅是0,也不仅仅是int i = 0; i = 10;

所以你的程序与:

相同
{{1}}

答案 3 :(得分:0)

如果您编写像

这样的代码
int A = new Int();

变量'A'由int的默认值赋值,因此您可以使用变量'A'而不为其赋值(在c#中我们无法使用变量而不为其赋值) 当使用关键字new时,它会自动调用默认构造函数,它会为变量赋值默认值。

答案 4 :(得分:0)

A

它将0声明并初始化为int A = 0;

基本上,这里的new运算符用于为值类型调用默认构造函数。对于int类型,默认值为0。

与以下内容具有相同的作用:

"n/a"