我一直在阅读很多,现在我真的很困惑。考虑一个普通的实例化:
Sampleclass instance1 = new Sampleclass();
经过大量阅读后,我发现instance1
是一个存储在堆栈中的引用变量,它包含存储在堆中的对象数据的内存地址。
如果这是正确的那么对象在哪里? instance1
也是一个对象。有时我只看到new Sampleclass()
这样的声明。这对于对象实例化是否足够?
答案 0 :(得分:7)
instance1
是一个变量。
因为它的类型是引用类型,所以它是对存在于堆上的对象实例的引用。
new SampleClass()
是一个构造函数调用,它在堆上创建一个新对象并返回对它的引用。
答案 1 :(得分:1)
instance1包含引用的副本,该副本指向创建新的objet Sampleclass()的内存。令人困惑的是,instance1仅仅是一个引用的副本,它与引用引用(C#引用)不同,它可能会让你感到困惑,因为它让我很困惑。
答案 2 :(得分:1)
表达式new Sampleclass()
创建一个对象。它还有一个值,它是指向该对象的指针。您可以使用此指针执行某些操作,例如将其存储在变量中(例如Sampleclass instance1 = new Sampleclass();
),或者您可以忽略它。
为什么要创造并忽略它?因为它的构造函数可能具有有益的副作用,例如。
答案 3 :(得分:0)
1)样本类(类型)>容器类型
2)instance1(Identifier)>用户友好的参考名称(01010101010)存储在内存(堆)中的数据和“instance1”本身存储在堆栈中的参考号(01010101010)
3)=(操作员)>将左侧值设为右侧
4)new(关键字)>购买存储数据的新空间
5)Sampleclass(); (构造函数)>制作Type“Sampleclass”的副本并存储在新购买的空间中(这实际上是一个对象或实例),并通过其名称“instance1”访问它,因为“instance1”知道堆内存中存储数据的实际位置。