java中对象和引用_Java中对象的对象引用及内存图分配

一.基本概念

1.对象:new()运算符在java虚拟机(JVM)的堆内存中开辟的内存空间称为对象。 2.对象引用:对象引用,是一个变量,这个变量中保存了另一个java对象的内存地址,对象引用储存在栈内存中。 3.new运算符:new运算符的作用是创建对象,在JVM中开辟新的内存空间。 4.JVM的存储机制

二.实例分析

下面给出一个代码实例及解析

示例代码在JVM中的存储机制

三.java对象的创建与c++对象创建的区别

1.首先看c++中创建对象的方式: 1.Student s; //定义标识符s,没有实际空间 2.Student s = new Student(); //定义s,并绑定到新创建的对象 第一种方式:s被存储在栈内存中,占用的是Student类方法中成员变量的内存之和 对于第二种方式则不同,该方式使用了指针,在定义s时在栈中开辟一个4字节的空间,new Student()时在堆中开辟一块空间,然后将该空间的首地址赋值给s,这样,通过s就可以找到对象在堆中的任何成员方法了。 第一种方式图解:  第二种方式图解:  2.在java中: Student s = new Student(); 在这种方式中, JVM在进行内存管理时,首先会在栈中给s分配一个空间,当new Student()执行后,会在堆中开辟对象的实际空间,然后将s指向堆中的空间,这样我们就可以方法对象的成员变量了。

总结:1.java定义变量名只是创建了一个新的标识符,跟创建对象没有关系,创建对象必须通过 new 来完成,只有创建对象时才会申请内存空间。但在 C++ 中,当你定义了一个变量 s 时,即使你没有给它赋值,也意味着你不但创建了一个新的标识符,同时还在栈中申请了对应的内存空间。因此,C++ 中定义的变量名不仅仅是个标识符,还自动关联着栈中的一块内存空间。而 C++ 中的 new 操作符表示的是在堆中申请内存,因为栈中的内存在运行时期大小是固定且有限的,因此需要动态内存分配的时候就需要用 new 来实现。这类似于 C 里面的 malloc 函数,只不过 new 操作符还封装了其它的操作。

2.通过对比我们会发现Java创建对象的方式和C++的第二种创建对象方式相似,但是却不完全相同,在C++中s是一个指针,通过指针我们可以访问内存中的任何地址,可以肆意的对内存做处理,然而在Java中s是一个引用,可以理解成是C++中指针的一个封装,我们不可以像在C++中用指针那样在Java中直接的进行地址++操作,这样一来就保证了内存的安全,这是C++和Java的很大不同。

[java创建对象与c++创建对象的比较](https://www.cnblogs.com/1Q84mi/archive/2013/05/15/3080716.html)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值