美文网首页
Java和C++对比

Java和C++对比

作者: YQ_1024 | 来源:发表于2024-01-11 21:44 被阅读0次

    运行原理

    • C++编译型语言。源代码通过特定平台的编译器,编译成特定平台的机器码。被操作系统加载之后可以直接进行运行。
    • Java,本质上是属于解释语言。是在JVM上进行执行,各个平台有对应的JVM。JVM在执行过程中,对字节码进行解释,让后上CPU运行
      PS:
      1.Hotspot虚拟机可以将热点代码编译成机器码。后续直接上CPU运行。但是这个也是发生在JVM内部。本质上我们的Java代码还是需要经过中间层JVM,不能直接和CPU进行交互。
      2.GraalVM 可以预先编译Class文件为对应平台的机器码,此种方式就是原生的可执行程序。

    对比

    • 平台兼容性
      C++是平台相关的,编译之后只能在对应的平台运行。如果需要换平台需要重新编译;由于JVM的原因,Java编译成Class文件之后。根据JVM规范,所有平台的JVM都可以进行加载和执行。
    • 基本数据类型
      C++对基本类型有标准的范围限制,但是字节长度跟具体的实现有关,同一个类型在不同的操作系统的长度可能不一样。Java在所有平台对所有的基本类型都有标准的范围限制和字节长度规定。
    • 系统调用
      C++可以直接进行系统库的调用;Java只能通过JNI或者JNA进行系统调用
    • 面向对象
      C++支持多重继承,包括虚拟继承。Java只允许单继承,需要多继承的情况下使用接口
      -内存管理
      C++显示分配和回收内存。Java使用垃圾回收器进行回收
    • 参数传递
      C++支持 指针,引用,传值调用。Java只支持值传递调用

    拓展

    C语言的值传递

    #include <stdio.h>
    void swap(int x,int y){
        int tmp=x;
         x=y;
         y=x;
    }
    int main(int argc, const char * argv[]) {
        int a=3;
        int b=4;
        swap(a,b);
        printf("调用swap函数后;a=%d,b=%d\n",a,b);
        return 0;
    }
    

    C语言的指针传递

    #include <stdio.h>
    //x y 变量是指针类型。且指向init类型的变量
    void swap(int * x,int * y){
        // *x表示获取x指针指向的变量。这里会发生左值转换
         int tmp= *x;
        // *x表示获取x指针指向的变量。*y 获取y执行的变量,这里发生左值转换
         *x = *y;
         *y = tmp;
    }
    int main(int argc, const char * argv[]) {
        int a=3;
        int b=4;
        swap(&a,&b);
        printf("调用swap函数后;a=%d,b=%d\n",a,b);
        return 0;
    }
    

    c语言的指针理解

    • 左值
      左值是指位于赋值表达式“=”左边的值。是一个变量。
    • 左值转换
      当左值位于赋值表达式右边的时候,会进行转换,取变量里面存储的值。
    • 指针
      表示一个变量。这这个变量里面存储的是另外一个变量的地址。
    • 指针变量
      int * x:x 是指针变量,这个指针里面存储的是一个int变量的地址。
    • x
      x是一个变量地址,
      是运算符,用于获取x地址所代表的变量。
    • &x
      获取x变量的地址。

    相关文章

      网友评论

          本文标题:Java和C++对比

          本文链接:https://www.haomeiwen.com/subject/footodtx.html