C++ C# JAVA 创建对象

来源:互联网 发布:win10 pe 网络全能版 编辑:程序博客网 时间:2024/06/09 23:45

创建对象:C++和Java的异同

C++

Java

类定义:

    Class User {...};

类定义:

Class User {...}

对象构造:               (1)

    User u(...);

对象构造:               (2)

    User* p = new User(...);

 

对象构造:

    User q = new User(...);

在标号为(1)的构造函数调用中,我们可以把u本身当作一个User对象。这个构造函数调用填充由u对象所占据的内存区域(栈空间),如下图(a)部分所示。

标号为(2)的构造函数调用创建了一小块内存区域(栈空间),其中存储了p的值(一个内存地址),然后填充一个较大的内存区域(堆空间),赋值符右边所创建的User对象就存储在这块内存中。p所指向的内存地址就是User对象存储位置。如下图(b)部分所示

Java的构造函数调用也保留一个内存位置(栈空间)存储q的值,并填充一块内存(堆空间)保存User对象。在这种情况下,为q的值所保留的内存地址保存了User对象引用,如下图(C)部分所示。

JAVA创建对象和C# 创建对象一样

我们可以把q中存储的对象引用看成是一个伪指针(一个内存伪地址),之所以说它是伪指针,是因为我们不能像C++指针那样对它进行解引用。如果由于内存管理的需要,JVM决定把这个User对象移动到内存中的一个不同位置,q所保存的对象引用仍然能够找到这个对象。反之,如果p所指向的对象转移到内存中的不同位置,那么p的值需要在程序的控制下进行显示的修改

0 0