1.編譯運行html
java是解釋性語言,java程序在運行時類加載器從類路經中加載相關的類,而後java虛擬機讀取該類文件的字節,執行相應操做.而C++編譯的 時候將程序編譯成本地機器碼.通常來講java程序執行速度要比C++慢10-30倍.即便採用just-in-time compiling (讀取類文件字節後,編譯成本地機器碼)技術,速度也要比C++慢好多.java
2.內存管理c++
java的垃圾自動回收機制較C++由程序員管理內存效率更低。程序員
3.語法區別:編程
java中的原始數據類型在每一個操做系統平臺長度都是相同,而C++這些數據類型長度是隨操做系統的不一樣而不一樣,因此java在不一樣操做系統上執行時有個轉化過程。在c和c++中有時出現數據類型的隱含轉換,這就涉及了自動強制類型轉換問題。例如,在c++中可將一浮點值賦予整型變量,並去掉其尾數。Java不支持c++中的自動強制類型轉換,若是須要,必須由程序顯式進行強制類型轉換。安全
JAVA語言讓編程者沒法找到指針來直接訪問內存無指針,而且增添了自動的內存管理功能,從而有效地防止了c/c++語言中指針操做失誤,如野指針所形成的系統崩潰。但也不是說JAVA沒有指針,虛擬機內部仍是使用了指針,只是外人不得使用而已。這有利於Java程序的安全。函數
Java不支持操做符重載。操做符重載被認爲是c++的突出特徵。spa
Java沒有函數,做爲一個比c++更純的面向對象的語言,Java強迫開發人員把全部例行程序包括在類中。同時,java中全部的對象都建立在堆中,沒有對象被建立在stack中,而C++的函數入口地址、局部變量和臨時對象是建立在stack中的。操作系統
Java不支持多重繼承,但容許一個類繼承多個接口(extends+implement),實現了c++多重繼承的功能,又避免了c++中的多重繼承實現方式帶來的諸多不便。 Java 裏對象不是值,全部的對象都經過引用來訪問,"." 操做符是將一個對象的引用做爲左操做參數來訪問這個對象的成員.在C++中和這種作法等價的是 "->"。Java還取消了c/c++中的結構和聯合。C++ 方法能夠聲明爲虛函數, 虛函數是在運行期根據對象的類型才肯定的. C++ 方法缺省狀況下不是虛的. 在 Java 裏, 方法缺省狀況下是虛的, 但可使用final
關鍵字使之聲明爲非虛的。指針
參考:維基百科http://zh.wikipedia.org/wiki/%E6%AF%94%E8%BE%83Java%E5%92%8CC%2B%2B