萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> Java引用與C指針的區別

Java引用與C指針的區別

   首先, 在Java中, 不存在引用傳遞(也就是地址傳遞)一說, 全部都是值傳遞, 自然, 在使用對象時實際上都是使用的引用

  Java語言明確說明取消了指針,因為指針往往是在帶來方便的同時也是導致代碼不安全的根源,同時也會使程序的變得非常復雜難以理解,濫用指針寫成的代碼不亞於使用早已臭名昭著的"GOTO"語句。Java放棄指針的概念絕對是極其明智的。但這只是在Java語言中沒有明確的指針定義,實質上每一個new 語句返回的都是一個指針的引用,只不過在大多時候Java中不用關心如何操作這個"指針",更不用象在操作C++的指針那樣膽戰心驚。

  非也,基本類型數據存放在Stack中,存放的是數據。而產生對象時,只把對象的reference存放在stack中,用於指向某個對象,對象本身存放在Heap中。

  還有, 調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態變量、實例變量等,都在堆(Heap)中創建,速度較慢。另外,依賴於具體的編譯器/JVM,局部變量還可能得到進一步優化。

  從實現上來講,引用可以理解為一種受限的指針,引用底層可以采用指針來實現,也可以采用句柄的方式實現。早期jvm一般采用句柄的方式,現在的jvm,比如sun的,IBM的,一般就是用指針來實現。

  不過從語言的角度來將,沒有必要把java的引用和C的指針來比較。

  指針是可以進行與整數做加減運算的,兩個指針之間也可以進行大小比較運算和相減運算。

  引用不行,只能進行賦值運算。

  當然有區別

  A a=new A();

  你可以 a=a+1;嗎? 指針就可以

        :更多精彩教程請關注三聯設計教程 欄目,

copyright © 萬盛學電腦網 all rights reserved