qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          對象創建:Java和C++比較

           1、C++創建對象方式

            在C++中我們可以采用如下兩種方式來創建對象,

          1  Dog  dog;//Dog為類名
          2  Dog *p =newDog();

            這兩種方式在C++中都能完成對象的創建,但是在內存中的處理卻完全不同。

            對于第一種方式而言,dog是被存儲在棧中的,占用的大小是Dog類中成員變量占用內存的和,此處不包括成員方法,因為成員方法是存放在公共存儲區以便所有該類的對象都可以訪問的。

          圖1 C++創建對象方式1的內存分配

            對于第二種方式則不同,該方式使用了指針,在定義*p時在棧中開辟一個4字節的空間,new Dog()時在堆中開辟一塊空間,然后將該空間的首地址賦值給*p,這樣,通過*p就可以找到對象在堆中的任何成員方法了。

          圖2 C++創建對象方式2的內存分配

            2、Java創建對象方式

            在C++中我們有兩種創建對象的方式,而在Java中只提供了如下的一種方式,

          1  Dog dog =newDog();

            JVM在進行內存管理時,首先會在棧中給dog分配一個空間,當new Dog();后會在堆中開辟對象的實際空間,然后將dog指向堆中的空間,這樣我們就可以方法對象的成員變量了。

          圖3 Java創建對象方式的內存分配

            3、總結

            通過圖2和圖3我們會發現Java創建對象的方式和C++創建對象方式的第二種很像,除了我故意寫的p和dog還有數字,其他的都是一樣的。是這樣的,他們的確很像,但是卻不完全相同,在C++中p是一個指針,通過指針我們可以訪問內存中的任何地址,可以肆意的對內存做處理,然而在Java中 dog是一個引用,可以理解成是C++中指針的一個封裝,我們不可以想在C++中用指針那樣在Java中直接的進行地址++操作,這樣一來就保證了內存的安全,這是C++和Java的很大不同。

            本人文字功底極弱,若有描述不清或不當之處,望大家指正,感謝各位花費時間閱讀完畢。

          posted on 2013-05-31 10:34 順其自然EVO 閱讀(182) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 昭通市| 尚志市| 麻江县| 米泉市| 商河县| 石狮市| 屯门区| 万荣县| 满洲里市| 天全县| 息烽县| 阳泉市| 万州区| 葵青区| 绥化市| 奉新县| 云安县| 皋兰县| 佛学| 襄垣县| 吐鲁番市| 固原市| 虎林市| 鸡西市| 喀什市| 高陵县| 利津县| 司法| 昌吉市| 广南县| 泰兴市| 石泉县| 应城市| 屏东县| 巴东县| 广平县| 鹿邑县| 永德县| 西宁市| 梅河口市| 洞口县|