zoukankan      html  css  js  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 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 等预处理命令从而实现条件编译。

  • 相关阅读:
    设计模式之命令模式
    设计模式之访问者模式
    ES6入门之Generator函数
    ES6入门之Iterator和for...of
    c# TcpClient简易聊天工具
    Mvc Action可以通过jsonp方式调取
    Webbrowser 在web项目中的使用
    关于java post get请求Demo (请求c#iis接口)
    Jquery 引擎模板 -template详解
    Redis在windows下安装过程
  • 原文地址:https://www.cnblogs.com/flyuz/p/9342444.html
Copyright © 2011-2022 走看看