c++ 与 java_Java与C++比较
本文僅從片面的角度比較Java與C++的一些特性,如有錯誤的地方,請指正。
語言特性上的一些差異:
1、Java沒有無符號整數,C++/C#都有。
2、Java中不存在指針。Java的引用是功能弱化的指針,只能做“調用所指對象的方法”的操作,C#默認不使用指針,在unsafe標識時可以使用。
3、Java不能用雙等號比較字符串(注意常量池中的字符串),C++/C#可以。
4、Java強制局部變量初始化。
5、Java不支持自動類型轉換,必須強制類型轉換。
6、Java和C#沒有宏。
7、C++經過編譯連接后生成二進制代碼,C#生成MSIL,Java生成字節碼。
8、Java和C#有垃圾回收機制(GC),C++需要手動釋放資源,可能會因失誤忘記釋放資源而造成內存泄漏等問題(C++11提供智能指針來解決這一問題)。
類機制上的一些差異:
1、 Java是完全面向對象的,所有方法都必須寫在類中,C++既可以面向過程也可以面向對象,函數不必須寫在類中。為了避免命名重復與實現代碼重用性,C++和C#使用命名空間,Java使用包。
2、 Java中有強制性異常(除RuntimeException外,必須在編譯前處理),而C++沒有。(C++ C# 和Java的捕獲異常語法大體相同)
3、 Java所有對象都直接或間接繼承自Object,并且提供接口機制,C++沒有共同的基類。
4、 Java在重寫時默認為虛函數,而C++必須用virtual說明。
C++:
1 classA2 {3 public:4 void virtual FUN() //修改這里的virtual
5 {6 cout<
10 class B : publicA11 {12 public:13 voidFUN()14 {15 cout<FUN();25 p = &b;26 b.FUN();27 return 0;28 }29 /*
30 有virtual時結果31 FUN in A is called32 FUN in B is called33 */
34 /*
35 刪去virtual時結果36 FUN in A is called37 FUN in A is called38 */
Java:
1 classA{2 public voidFUN(){3 System.out.println("FUN in A is called");4 }5 }6 class B extendsA{7 public voidFUN(){8 System.out.println("FUN in B is called");9 }10 }11 public classVirtualTest {12 public static voidmain(String args[]) {13 A a = newA();14 B b = newB();15 A p;16 p =a;17 p.FUN();18 p =b;19 p.FUN();20 }21 }22 /*
23 默認為virtual24 FUN in A is called25 FUN in B is called26 */
5、 Java因會與方法重載產生語義二義性而不支持默認參數。
6、 C++有運算符重載,和類型轉換函數,而Java中沒有。
7、Java 不支持多重繼承,只能通過實現多個接口來達到相同目的,C++ 支持多重繼承。
8、Java 不支持條件編譯,C++ 通過 #ifdef #ifndef 等預處理命令從而實現條件編譯。
總結
以上是生活随笔為你收集整理的c++ 与 java_Java与C++比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java aspose重叠_Aspose
- 下一篇: java日期加减秒_Java日期——年、