国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - Java和C++通過new創(chuàng)建的對象有何區(qū)別?

Java和C++通過new創(chuàng)建的對象有何區(qū)別?

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

Java和C++都是面向?qū)ο蟮木幊陶Z言,然而Java和C++在創(chuàng)建對象時(shí)卻存在不同的方式,由于方式的不同導(dǎo)致在內(nèi)存中管理的不同。這篇文章主要給大家介紹了關(guān)于Java和C++通過new創(chuàng)建對象區(qū)別的相關(guān)資料,需要的朋友可以參考借鑒,下面

前言

本文我們不去談int、float、char等基本數(shù)據(jù)類型,而是用一般的類來說明。因?yàn)閖ava中可以直接通過 int varname 的方式來定義和使用一個(gè)基本類型的變量,但對于其它一般類型的對象,必須使用 new 來創(chuàng)建。

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

java

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

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

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

Java和C++通過new創(chuàng)建的對象有何區(qū)別?

圖3 java創(chuàng)建對象方式的內(nèi)存分配

c++

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

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

這兩種方式在c++中都能完成對象的創(chuàng)建,但是在內(nèi)存中的處理卻完全不同。

對于第一種方式而言,dog是被存儲在棧中的,占用的大小是dog類中成員變量占用內(nèi)存的和,此處不包括成員方法,因?yàn)槌蓡T方法是存放在公共存儲區(qū)以便所有該類的對象都可以訪問的。

Java和C++通過new創(chuàng)建的對象有何區(qū)別?  

圖1 c++創(chuàng)建對象方式1的內(nèi)存分配

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

Java和C++通過new創(chuàng)建的對象有何區(qū)別?

圖2 c++創(chuàng)建對象方式2的內(nèi)存分配

區(qū)別總結(jié)

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

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

也就是說,定義變量名只是創(chuàng)建了一個(gè)新的標(biāo)識符,跟創(chuàng)建對象沒有關(guān)系,創(chuàng)建對象必須通過 new 來完成,只有創(chuàng)建對象時(shí)才會申請內(nèi)存空間。

但在 c++ 中,當(dāng)你定義了一個(gè)變量 s 時(shí),即使你沒有給它賦值,也意味著你不但創(chuàng)建了一個(gè)新的標(biāo)識符,同時(shí)還在棧中申請了對應(yīng)的內(nèi)存空間。

因此,c++ 中定義的變量名不僅僅是個(gè)標(biāo)識符,還自動關(guān)聯(lián)著棧中的一塊內(nèi)存空間。

而 c++ 中的 new 操作符表示的是在堆中申請內(nèi)存,因?yàn)闂V械膬?nèi)存在運(yùn)行時(shí)期大小是固定且有限的,因此需要動態(tài)內(nèi)存分配的時(shí)候就需要用 new 來實(shí)現(xiàn)。這類似于 c 里面的 malloc 函數(shù),只不過 new 操作符還封裝了其它的操作。

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

總結(jié)

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲青草 | 男人的天堂在线视频 | 亚洲日本乱码在线观看 | 成人久久久精品国产乱码一区二区 | 成人精品一区二区三区 | 一区不卡 | 日韩欧美在线视频 | 精品久久久久久国产 | 国产美女精品视频 | 久久久精品国产 | 91精品国产综合久久久久久丝袜 | 亚洲精品福利 | 能看的av网站 | 日韩精品www| 爱操在线| 欧美黑人xx | 日韩在线一区二区 | 一区二区三区 在线 | wwwav在线| 一级全黄性色生活片 | 亚洲综合色视频在线观看 | 精品久久久久一区二区国产 | 国产伦精品一区二区三区四区视频 | 中文字幕一区二区在线观看 | 日韩国产高清在线 | 午夜久久久久久久久久一区二区 | 精品96久久久久久中文字幕无 | 日韩在线播放一区二区三区 | 在线不卡a资源高清 | 欧美一区二区三区的 | 色a综合 | 亚洲福利在线观看 | 久热中文 | 国产福利91精品一区二区 | 久久福利电影 | 成人国产精品视频 | 成人免费看 | 精品国产乱码久久久久久影片 | 国产精品综合 | 永久91嫩草亚洲精品人人 | 亚洲欧美日韩一区二区 |