当声明一个 int..
int A = 10;
为什么不这样做呢?
int A = new Int()
A=10;
都一样吗?
因为是值类型int
的语法糖。Int32
顺便说一句,常量值10
(值类型 Int32的实例)也是如此。这就是为什么您不需要使用new
来创建新实例,而是复制10
并调用它的原因A
。类似的语法也适用于引用类型,但不同之处在于不复制;创建一个参考。
本质上,您可以将其10
视为先前声明的Int32
. 然后int A = 10
只是将变量 A 设置为值的副本10
(如果我们谈论的是引用类型,那么 A 将被设置为对实例的引用而不是副本)。
为了更好地说明这里是另一个例子:
struct SomeValueType {
public SomeValueType(){
}
}
public static readonly SomeValueType DEFAULT = new SomeValueType();
然后你可以这样做:
SomeValueType myValueType = DEFAULT; // no neeed to use new!
现在想象一下SomeValueType
isInt32
和DEFAULT
is 10
。就在那里!
在 C# 中有两种类型,“引用类型”和“值类型”。(指针是第三种类型,但我们不要讨论它。)
当您使用值类型的默认构造函数时,您所说的只是“给我这个值类型的默认值”。所以new int()
不多也不少,只是说而已0
。
所以你的程序是一样的:
int i = 0;
i = 10;
你可能见过 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
您可能会想象,由于第二个分配覆盖了第一个,所以第一个分配不是必需的。
if you write youe code like
int A = new Int();
the variable 'A' is assigned by the default value of int, so you can use variable 'A' without assigning a value to it(in c#
we cant use a variable without assigning a value to it)
when using the keyword new it will automatically call the default constructor, it will assign default values to the variables.
int A = new Int();
It declares and initializes A
to 0
.
Basically, the new operator here is used to invoke the default constructor for value types. For the type int, the default value is 0.
It has the same effect as the following:
int A = 0;