在哪个部分内存中创建了哪个对象?

问题描述 投票:-10回答:2
public class Order
{
    static Customer cust = new Customer();
    string sEmpty = "";

    public static void main(String args[])
    {
        int iTotal = 10;
        string sProductName = "Salt";
        Ship shp = new Ship();
    }
}

在上面的代码中,哪个对象和引用是在内存的哪个部分创建的? (我的意思是堆和堆栈)

alt text (来源:c-sharpcorner.com

c# java stack heap
2个回答
4
投票

既然你标记了你的问题Java,我会假设你的意思是Java。直接从马的嘴里:

Java虚拟机具有在所有Java虚拟机线程之间共享的堆。堆是运行时数据区,从中分配所有类实例和数组的内存。

JVM Spec

这是一个前面的SO问题的link,详细介绍了这个问题(并且是关于该主题的语言无关的讨论)。

这是来自C#角落的一篇文章的link,详细介绍了C#中的问题。


1
投票

订单和客户都在堆。虽然Customer可以是结构,但它是引用类型(例如,类)的组合成员。

所有字符串都是引用类型,并在堆上创建。

我不确定Ship类,因为我没有声明(即,我不知道它是结构还是类)。

int iTotal变量在堆栈上创建。

这对C#来说是正确的。 Java可能有不同的规则在起作用。

© www.soinside.com 2019 - 2024. All rights reserved.