JAVA和C++區別詳解
1)java是解釋性語(yǔ)言,java程序在運行時(shí)類(lèi)加載器從類(lèi)路經(jīng)中加載相關(guān)的類(lèi),然后java虛擬機讀取該類(lèi)文件的字節,執行相應操作.而C++編譯的 時(shí)候將程序編譯成本地機器碼.一般來(lái)說(shuō)java程序執行速度要比C++慢10-30倍.即使采用just-in-time compiling (讀取類(lèi)文件字節后,編譯成本地機器碼)技術(shù),速度也要比C++慢好多.
本文引用地址:http://dyxdggzs.com/article/150609.htm2)java程序有要從網(wǎng)絡(luò )上加載類(lèi)字節,然后執行,這也是導致java運行速度慢的原因.
3)在程序運行過(guò)程中,java虛擬機要檢測數組是否越界,在C++中則不檢測.
4)java中所有的對象都創(chuàng )建在堆中,沒(méi)有對象被創(chuàng )建在stack中,而C++有的對象和變量是創(chuàng )建在stack中的
5) java在運行過(guò)程中檢測對象的引用是否為空,如果引用指向都空指針,且執行某個(gè)方法時(shí)會(huì )拋出空指針異常
6)java運行時(shí)對類(lèi)型檢測,如果類(lèi)型不正確會(huì )拋出ClassCastException異常.
7)java的垃圾回收機制較C++由程序員管理內存效率更低.
8) java中的原始數據類(lèi)型在每個(gè)操作系統平臺長(cháng)度都是相同,而C++這些數據類(lèi)型長(cháng)度是隨操作系統的不同而不同,所以java在不同操作系統上執行時(shí)有個(gè)轉化過(guò)程.
9)在java中String 是UNICODE.當java要操作一個(gè) ASCII string 時(shí),比C++效率上相對要低一些.
10)java中采用的是動(dòng)態(tài)鏈接
以下內容摘自《Java程序設計與問(wèn)題解決:基礎篇》附錄
Java和C++看起來(lái)很類(lèi)似,但兩者之間的差別要多于粗略地查看這兩種語(yǔ)言時(shí)所認為的那樣。我們不會(huì )對所有的區別進(jìn)行描述,但為了幫助從C++(或C)向Java過(guò)渡,會(huì )對兩者的一些相似及不同之處進(jìn)行介紹。
基本類(lèi)型
Java中的基本類(lèi)型基本上和C及C++中的一樣(int、short、long、float、double和 char),但Java添加了byte和boolean類(lèi)型。(近期的C++版本中也有了bool類(lèi)型,對應于Java中的boolean類(lèi) 型。)Java中沒(méi)有名為long double的類(lèi)型。與C和C++不同,在Java中,用字節表示的某些特定基本類(lèi)型值的大小是完全確定的,與實(shí)現無(wú)關(guān)。細節請參見(jiàn)《Java程序設計與 問(wèn)題解決:基礎篇》的第2章。
字符串
與C和C++的某些版本不同,Java中的字符串不是特定類(lèi)型的字符數組。在Java中有一個(gè)預定義的String類(lèi) 型。(對String類(lèi)的討論是從《Java程序設計與問(wèn)題解決:基礎篇》的第2章開(kāi)始的。)Java的String類(lèi)與C++近期版本中的string 類(lèi)有些類(lèi)似。
控制流程
Java中的控制結構(if-else、switch、while、do-while和for)與C和C++一樣。但是, 有一些差別會(huì )影響到對Java中控制結構的使用。具體來(lái)說(shuō),Java中沒(méi)有逗號運算符,Java中的boolean類(lèi)型既不是一個(gè)數字類(lèi)型,也無(wú)法將其值 強制轉換為一個(gè)數字類(lèi)型,而且賦值運算符在Java中比在C和C++中表現得更好一些。
Java中沒(méi)有逗號運算符。但是,Java中的for語(yǔ)句定義為可以使用逗號,就像下列代碼這樣:
for (n = 1, product = 1; n = 10; n++)
product = product * n;
但這個(gè)“逗號運算符”只能在for語(yǔ)句中使用。
在Java中,boolean類(lèi)型有兩個(gè)值:true和false,無(wú)法將這兩個(gè)值轉換成數字值,用強制類(lèi)型轉換也不行。
C和C++中的一個(gè)典型錯誤就是用=取代了==,就像下列代碼這樣:
if ( n = 42 )
?
在C和C++ 中,表達式n=42會(huì )返回值42,根據所用的C或C++版本的不同,這個(gè)表達式可以是或將要被轉換成一個(gè)布爾值。在Java中,n=42也會(huì )返回值42, 但42不是boolean類(lèi)型的,它也不會(huì )被轉換成boolean類(lèi)型。因此,在Java中,這種錯誤會(huì )引發(fā)一個(gè)編譯器錯誤消息。
相等性測試
在Java中測試一個(gè)類(lèi)類(lèi)型對象的相等性是很麻煩的。對基本類(lèi)型的值來(lái)說(shuō),運算符==會(huì )如你所愿地對相等性進(jìn)行測試。但 是,用==對兩個(gè)類(lèi)類(lèi)型的對象進(jìn)行比較時(shí),測試的是對象是否處于同一個(gè)內存單元,而不是它們是否具有相同的數據。Java類(lèi)通常會(huì )定義一個(gè)名為 equals的方法來(lái)測試兩個(gè)對象是否是我們直覺(jué)意義上的相等。在Java中不能重載==運算符(或任何運算符)。
main方法(函數)及其他方法
在Java中,函數被稱(chēng)為方法(method)。main方法(函數)在Java中的功能與在C和C++中一樣。在Java中,main方法頭部通常如下所示。
public static void main(String[] args)
在Java中,所有的方法—實(shí)際上,任意類(lèi)型的所有代碼—都是在類(lèi)中定義的。
文件及包含文件
Java中沒(méi)有#inlude指示。Java中確實(shí)有一個(gè)import語(yǔ)句,可以導入一整個(gè)包(庫)以供
在一個(gè)類(lèi)(或文件)中使用。
c++相關(guān)文章:c++教程
評論