教你區(qū)別Java引用與C指針
現(xiàn)在聽(tīng)說(shuō)有很多的朋友不能正確的將Java引用于C指針區(qū)別開(kāi)來(lái),所以特意提供這篇文章給大家學(xué)習(xí)分享一下,希望能給各位帶來(lái)幫助!
首先,在Java中,不存在引用傳遞(也就是地址傳遞)一說(shuō),全部都是值傳遞,自然,在使用對(duì)象時(shí)實(shí)際上都是使用的引用
Java語(yǔ)言明確說(shuō)明取消了指針,因?yàn)橹羔樛窃趲?lái)方便的同時(shí)也是導(dǎo)致代碼不安全的根源,同時(shí)也會(huì)使程序的變得非常復(fù)雜難以理解,濫用指針寫(xiě)成的代碼不亞于使用早已臭名昭著的"GOTO"語(yǔ)句。Java放棄指針的概念絕對(duì)是極其明智的。但這只是在Java語(yǔ)言中沒(méi)有明確的指針定義,實(shí)質(zhì)上每一個(gè)new語(yǔ)句返回的都是一個(gè)指針的引用,只不過(guò)在大多時(shí)候Java中不用關(guān)心如何操作這個(gè)"指針",更不用象在操作C++的指針那樣膽戰(zhàn)心驚。
非也,基本類(lèi)型數(shù)據(jù)存放在Stack中,存放的是數(shù)據(jù)。而產(chǎn)生對(duì)象時(shí),只把對(duì)象的reference存放在stack中,用于指向某個(gè)對(duì)象,對(duì)象本身存放在Heap中。
還有,調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量、實(shí)例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴(lài)于具體的編譯器/JVM,局部變量還可能得到進(jìn)一步優(yōu)化。
從實(shí)現(xiàn)上來(lái)講,引用可以理解為一種受限的指針,引用底層可以采用指針來(lái)實(shí)現(xiàn),也可以采用句柄的方式實(shí)現(xiàn)。早期jvm一般采用句柄的方式,現(xiàn)在的jvm,比如sun的,IBM的,一般就是用指針來(lái)實(shí)現(xiàn)。
不過(guò)從語(yǔ)言的角度來(lái)將,沒(méi)有必要把java的引用和C的指針來(lái)比較。
指針是可以進(jìn)行與整數(shù)做加減運(yùn)算的,兩個(gè)指針之間也可以進(jìn)行大小比較運(yùn)算和相減運(yùn)算。
引用不行,只能進(jìn)行賦值運(yùn)算。
當(dāng)然有區(qū)別
Aa=newA();
你可以a=a+1;嗎?指針就可以
- 1. ASP與JSP之間的區(qū)別和聯(lián)系
- 2. 教你區(qū)別display:inline與float:left
- 3. array和row在數(shù)組中的區(qū)別
- 4. 幫你怎么區(qū)別include和require
- 5. 關(guān)于echo(),print(),print_r()三者之間的區(qū)別
- 6. 教你區(qū)別Java引用與C指針
- 7. Office 365 β版本 小企業(yè)版和企業(yè)版收費(fèi)有區(qū)別
- 8. Java繼承和接口的區(qū)別
- 9. Java schedule與scheduleAtFixRate區(qū)別