博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ C# JAVA 创建对象
阅读量:2435 次
发布时间:2019-05-10

本文共 643 字,大约阅读时间需要 2 分钟。

创建对象: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的值需要在程序的控制下进行显示的修改

转载地址:http://qeemb.baihongyu.com/

你可能感兴趣的文章
How Computers Know What We Want — Before We Do
查看>>
About Recommender Systems
查看>>
jason数据格式
查看>>
金山快盘的安全性太差了
查看>>
KDD Cup2011
查看>>
“相关性”时代的到来
查看>>
OpenCV资料
查看>>
极阅和微精
查看>>
智能Web算法第二版前言和译者序
查看>>
RPC实践(二)JsonRPC实践
查看>>
RPC实践(三)Hessian实践
查看>>
Zookeeper实践(四)zookeeper的WEB客户端zkui使用
查看>>
RPC实践(五)Dubbo实践-服务集群
查看>>
java单元测试Junit实践(一) Junit基础
查看>>
Webservice实践(二)Webservice 客户端开发
查看>>
Webservice实践(三)基于JDK的jax ws进行服务端开发
查看>>
Eclipse中10个最有用的快捷键组合
查看>>
Routing
查看>>
linux下access函数的应用
查看>>
linux系统调用之文件:递归删除非空目录
查看>>