2

我读了很多书,现在我真的很困惑。考虑一个普通的实例化:

Sampleclass  instance1  = new Sampleclass();

在阅读了很多之后,我才知道这instance1是一个存储在堆栈中的引用变量,其中包含存储在堆中的对象数据的内存地址。

如果这是正确的,那么对象在哪里?instance1也是一个对象。有时我只看到像new Sampleclass(). 这足以用于对象实例化吗?

4

4 回答 4

8

instance1是一个变量。

因为它的类型是引用类型,所以它是对存在于堆上的对象实例的引用。

new SampleClass()是一个构造函数调用,它在堆上创建一个新对象并返回对它的引用。

于 2013-08-20T17:55:20.487 回答
1

instance1 包含引用的副本,它指向创建新对象 Sampleclass() 的内存。令人困惑的是 instance1 只是引用的副本,它与引用 ref(C# 参考)不同,这可能会让您感到困惑,因为它让我感到困惑。

于 2013-08-20T17:59:48.530 回答
1

该表达式new Sampleclass()创建一个对象。它还有一个,它是指向该对象的指针。你可以用这个指针做一些事情,比如将它存储在一个变量中(例如Sampleclass instance1 = new Sampleclass(); ),或者你可以忽略它。

为什么要创造一些东西而忽略它?因为它的构造函数可能具有例如有益的副作用。

于 2013-08-20T18:05:06.683 回答
0

1)Sampleclass(类型)>容器类型

2)instance1(标识符)>存储在内存(堆)中的数据的用户友好引用名称(01010101010)和“instance1”本身存储在堆栈中的引用(01010101010)

3)=(运算符)>将左侧值分配给右侧

4) new (keyword) > 购买新空间来存储数据

5)样本类();(构造函数)> 复制类型“Sampleclass”并存储在新购买的空间中(这实际上是一个对象或实例)并通过其名称“instance1”访问它,因为“instance1”知道存储数据在堆内存中的实际位置.

于 2017-12-16T05:42:56.920 回答