【原创】Java创建对象与C++创建对象的斗劲

    添加时间:2013-5-15 点击量:

      本文首要对比Java与C++在创建对象时的不合,仅代表小我概念,如有不公道之处,望大师批驳斧正。闲话少说,直奔主题。


      Java和C++都是面向对象的编程说话,然而Java和C++在创建对象时却存在不合的体式格式,因为体式格式的不合导致在内存中经管的不合。


    1、C++创建对象体式格式 


         在C++中我们可以采取如下两种体式格式来创建对象,



    1  Dog  dog;//Dog为类名

    2 Dog p = new Dog();


      这两种体式格式在C++中都能完成对象的创建,然则在内存中的处理惩罚却完全不合。


      对于第一种体式格式而言,dog是被存储在栈中的,占用的大小是Dog类中成员变量占用内存的和,此处不包含成员办法,因为成员办法是存放在公共存储区以便所有该类的对象都可以接见的。


      


        图1 C++创建对象体式格式1的内存分派


      对于第二种体式格式则不合,该体式格式应用了指针,在定义p时在栈中开辟一个4字节的空间,new Dog()时在堆中开辟一块空间,然后将该空间的首地址赋值给p,如许,经由过程p就可以找到对象在堆中的任何成员办法了。



        图2 C++创建对象体式格式2的内存分派


    2、Java创建对象体式格式  


      在C++中我们有两种创建对象的体式格式,而在Java中只供给了如下的一种体式格式,



    1  Dog dog = new Dog();


      JVM在进行内存经管时,起首会在栈中给dog分派一个空间,当new Dog();后会在堆中开辟对象的实际空间,然后将dog指向堆中的空间,如许我们就可以办法对象的成员变量了。



        图3 Java创建对象体式格式的内存分派


    3、总结


      经由过程图2和图3我们会发明Java创建对象的体式格式和C++创建对象体式格式的第二种很像,除了我有心写的p和dog还稀有字,其他的都是一样的。是如许的,他们的确很像,然则却不完全雷同,在C++中p是一个指针,经由过程指针我们可以接见内存中的任何地址,可以肆意的对内存做处理惩罚,然而在Java中dog是一个引用,可以懂得成是C++中指针的一个封装,我们不成以想在C++顶用指针那样在Java中直接的进行地址++操纵,如许一来就包管了内存的安然,这是C++和Java的很大不合。


      本人文字功底极弱,如有描述不清或不当之处,望大师斧正,感激各位花费时候浏览完毕。


    我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
    分享到: