當(dāng)前位置:首頁(yè)文章首頁(yè) IT學(xué)院 Java

教你區(qū)別Java引用與C指針

作者:  來(lái)源:  發(fā)布時(shí)間:2011-5-17 17:46:19  點(diǎn)擊:

現(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;嗎?指針就可以

相關(guān)軟件

文章評(píng)論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z