声明int ..
int A = 10;
为什么不这样做呢?
int A = new Int()
A=10;
都是一样的吗?
答案 0 :(得分:10)
因为int
是Int32
的语法糖,因为它是一种值类型。顺便提一下,常量值10
(value 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!
现在假设SomeValueType
是Int32
而DEFAULT
是10
。它就在那里!
答案 1 :(得分:7)
你可能已经看过Java,其中int
和Integer
是两个不同的东西,后者要求你写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"