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 class A    
 2 {    
 3     public:    
 4         void virtual FUN()  //修改這里的virtual  
 5         {    
 6             cout<<"FUN in A is called"<<endl;    
 7         }    
 8 };    
 9      
10 class B : public A    
11 {    
12     public:    
13         void FUN()    
14         {    
15             cout<<"FUN in B is called"<<endl;    
16         }    
17 };    
18 int main()    
19 {    
20     A a;    
21     B b;    
22     A *p;    
23     p = &a;    
24     p->FUN();    
25     p = &b;    
26     b.FUN();    
27     return 0;    
28 }  
29 /* 
30 有virtual時結果 
31 FUN in A is called 
32 FUN in B is called 
33 */  
34 /* 
35 刪去virtual時結果 
36 FUN in A is called 
37 FUN in A is called 
38 */ 

Java:

 1 class A{    
 2     public void FUN(){    
 3         System.out.println("FUN in A is called");    
 4     }    
 5 }    
 6 class B extends A{    
 7     public void FUN(){    
 8         System.out.println("FUN in B is called");    
 9     }    
10 }    
11 public class VirtualTest {    
12     public static void main(String args[])  {    
13         A a = new A();    
14         B b = new B();    
15         A p;    
16         p = a;    
17         p.FUN();    
18         p = b;    
19         p.FUN();    
20     }    
21 }  
22 /* 
23 默認為virtual 
24 FUN in A is called 
25 FUN in B is called 
26 */  

5、 Java因會與方法重載產生語義二義性而不支持默認參數。

6、 C++有運算符重載,和類型轉換函數,而Java中沒有。

7、Java 不支持多重繼承,只能通過實現多個接口來達到相同目的,C++ 支持多重繼承。

8、Java 不支持條件編譯,C++ 通過 #ifdef #ifndef 等預處理命令從而實現條件編譯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM