关于C++和Java的引用和指针的问题

来源:互联网 发布:阿里云 云市场 编辑:程序博客网 时间:2024/05/17 06:12

         最近几天,有一个学弟问我关于C++指针和java引用的问题,突然想写一篇博客来写写我对这些基础语言的理解。以下就是我回答编程新手的答案,我对指针和引用的理解就是,它们都是在栈里保存的一个地址(定义的过程),系统通过这个地址可以访问堆里的其它内存空间,这个系统可以是jvm,也可以是运行c++的操作系统,这个所谓的其它内存空间保存着由类实例化得到的对象(new 的过程)。

        今天是第二天了,我突然发现自己已经好久没有写过博客了,第一是自己的个人问题,第二是真正的这段时间真的没有去学习到什么真正有用的东西,这让我去一直反思,反思自己,反思所遇到的一切。我也终于找到一个僻静的场所来写东西,来思考和设计程序。这恰好验证了那句经典的句子,“不忘初心,方得始终”,何为初心,何为始终。学习编程就是一个成长的过程,我拓展了自己写代码的广度,接下来就是要往深度进发。

        假如先不考虑编程语言的差异,java和c++其实一脉相承,本质上其实并没有多大的区别,只是对底层的封装是两者成为了两门完全不同的编程语言,c++的指针和java的引用无非就是在栈里的地址而已。由于内存中栈的资源及其宝贵,早先的机器一般只有几兆,而剩余的几乎都是堆,也就是说,堆的空间相对于栈而言,大得多,因此,操作系统对资源的分配就有些特殊了。假如 c++和java都写好了一个 Person 的类,那么 Person o;就相当于java在栈里开辟了一个空间保存一个地址,同样地,c++就是Person *o;

前者是引用,后者是指针,但是这两者都还没有赋值,在java里直接操作o将会引发NullPointerException 异常,在c++里这就是空指针。我特意查了一下,相关的资料,"new  关键字将返回一个指向新创建对象的引用“  ,这是权威书籍的说法,所谓的引用也就是保存在栈里的地址,返回的这个地址将保存在引用中,而new 的过程就是在堆里开辟一个内存,这个内存的地址就是被返回给引用的地址,这是我对java的理解,c++也应该差不多。接下来就是对对象的操作了,在java中,o.方法,即可访问在Person类内定义的方法,当然属性也是一样的,在c++中,语法也是类似的。

0 0
原创粉丝点击