一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java和C++通過new創建的對象有何區別?

Java和C++通過new創建的對象有何區別?

2021-02-06 12:06Wray Zheng Java教程

Java和C++都是面向對象的編程語言,然而Java和C++在創建對象時卻存在不同的方式,由于方式的不同導致在內存中管理的不同。這篇文章主要給大家介紹了關于Java和C++通過new創建對象區別的相關資料,需要的朋友可以參考借鑒,下面

前言

本文我們不去談int、float、char等基本數據類型,而是用一般的類來說明。因為java中可以直接通過 int varname 的方式來定義和使用一個基本類型的變量,但對于其它一般類型的對象,必須使用 new 來創建。

因此,為了更一般性地分析,體現兩種語言創建對象的差異,我們用自定義的類 student 進行說明,以下內容均針對一般的類而言。

java

在 java 中,我們可以通過如下方式定義變量:

?
1
2
student s; //定義標識符s,沒有實際空間
student s = new student(); //定義s,并綁定到新創建的對象

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

Java和C++通過new創建的對象有何區別?

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

c++

在c++中,變量也可以同上來定義,但含義不同:

?
1
2
student s; //定義標識符s,并在棧中申請空間
student* s = new student(); //定義s,并在堆中申請空間,過后需手動釋放內存

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

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

Java和C++通過new創建的對象有何區別?  

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

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

Java和C++通過new創建的對象有何區別?

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

區別總結

兩種語言里都含有 new 操作符,但它們的含義大不相同,這與它倆的變量管理方式有關。

在 java 中,只有當你使用 new 操作符時,才會真正在內存中申請一塊空間,創建一個新對象,并將該對象綁定到你所定義的變量名上。其它情況下,要么是將已有對象綁定到某個變量名上,要么就是定義的變量名是個空引用,沒有綁定任何對象。

也就是說,定義變量名只是創建了一個新的標識符,跟創建對象沒有關系,創建對象必須通過 new 來完成,只有創建對象時才會申請內存空間。

但在 c++ 中,當你定義了一個變量 s 時,即使你沒有給它賦值,也意味著你不但創建了一個新的標識符,同時還在棧中申請了對應的內存空間。

因此,c++ 中定義的變量名不僅僅是個標識符,還自動關聯著棧中的一塊內存空間。

而 c++ 中的 new 操作符表示的是在堆中申請內存,因為棧中的內存在運行時期大小是固定且有限的,因此需要動態內存分配的時候就需要用 new 來實現。這類似于 c 里面的 malloc 函數,只不過 new 操作符還封裝了其它的操作。

總結而言,java 中的變量名僅僅是一個用于引用內存中實際對象的標識符,如果你沒給它關聯對象,它就為空引用。而 c++ 中的變量名(非指針類型),雖然也是標識符,但卻始終關聯著實際的內存空間,當我們看到一個變量(非指針類型)時,就知道它代表著一塊實際的內存空間。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.codebelief.com/article/2017/11/difference-between-java-and-cpp-using-new-operator-to-create-an-object/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 秋霞午夜| 消息称老熟妇乱视频一区二区 | 国产成人免费a在线资源 | 国产一级一级片 | 欧美亚洲国产一区二区三区 | 动漫美女胸被狂揉扒开吃奶动态图 | 亚洲 欧美 国产 在线观看 | 韩国三级hd中文字幕李采潭 | 午夜久久久久久亚洲国产精品 | 成人精品一区二区三区中文字幕 | 538亚洲欧美国产日韩在线精品 | 国产1区2区在线观看 | 精品在线免费观看 | 亚洲国产在线观看免费视频 | 美女被灌浣肠失禁视频 | 色色色色色色网 | 青青青视频免费线看 视频 青青青青青国产免费手机看视频 | 欧美日韩看看2015永久免费 | 国产一区二区精品 | 日韩黄色影视 | 国内精品一区视频在线播放 | 午夜深情在线观看免费 | 四虎精品成人免费影视 | 啪啪模拟器| 桃乃木香奈作品在线观看 | 亚洲福利精品电影在线观看 | 国产香蕉视频在线观看 | 国产999在线观看 | 牛牛色婷婷在线视频播放 | 欧美18-19sex性处 | 成人精品一区久久久久 | 人与动人物人a级特片 | 国产精品片 | 亚洲无毛片 | 午夜私人影院在线观看 视频 | 热99精品视频 | 欧美日韩在线一区二区三区 | 亚洲精品国产A久久久久久 亚洲精品福利一区二区在线观看 | 亚州性夜夜射在线观看 | 成年男女免费视频 | 久青草国产在线观看视频 |