关于C和Java

作者: 不返y | 来源:发表于2023-11-25 17:30 被阅读0次

    1.书写

    命名规范

    c语言用下画线连接词,java采用驼峰命名法。

    get_name getName

    驼峰命名法:第一个单词首字母不大写,其他单词首字母大写。

    命名只是书写规范,没有其他特殊含义。一般要求各个语言遵守各自的命名规范。

    函数与数组的区别

    一个花括号{}区别,一个[]区别

    1.花括号的位置

    //c:
    void function()
    {
        //内容
    }
    
    //java:
    public void function(){
        //内容
    }
    
    1. 数组的[]位置
    //c
    int arr[] = {1,2,3};
    
    //java
    //常用写法
    int[] arr = {1,2,3};
    //c的写法,支持但是不建议
    int arr[] = {1,2,3};
    

    2.相似

    主入口

    int main()

    public static void main(String[] args) (idea简写psvm)

    导包方式

    #include<xxx.h>

    import xxx;

    常量的写法

    无论c还是java常量都统一要求大写,但只是建议而已。

    //c常量:
    
    #define MAX 100    (后面不要写分号;,define相当于word里的查找替换,也会将;替换过去)
    
    const int MAX = 100;
    

    java常量:

    public static final int MAX = 100; (idea可简写 psf

    java预留了c里面的constgoto关键字,但是一点用也没有,仅仅是语法会高亮。

    printfprintln输出语句

    c:

    printf("",);
    

    java:

    System.out.println();   //可理解ln为换行  '\n'
    

    java也有无ln的写法 ---> print(); 就是少个换行

    printf();java也支持c语言里面的printf,用法一致

    struct与class

    struct与class差不多,不同点也就是默认权限

    struct默认权限public

    class默认权限 比私有private松一点,比public严格(java的默认权限是 在同一个包里可以访问 )

    string 与 char[]

    char[] 是c的字符串。本质是一个字符数组,可使用下标调用修改每一个字符。

    char[] s = "123456";

    String 是java的字符串。是一个常量,不可修改,我们进行的每一次操作都是创建了一个新的字符串。

    String s = "123456";

    随机值的获取

    c:

    //c
    #include<time.h>
    
    srand((unsigned)time(NULL));//设置随机种子
    int result =rand() % 100 + 1;//举例获取1-100的随机值
    

    java:

    //第一种
    Random r = new Random();
    int result = r.nextInt(100)+1;//举例获取1-100的随机值
    
    //第二种(Math.random()随机值为0-1)
    java  Math.random()
    int result = (int)(Math.random()*100)+1//举例获取1-100的随机值
    

    3.区别

    对于c语言的部分编译器上,下面这段代码可能出错

    for(int i = 0; i < 10; i++){
        //内容
    }
    

    这是因为:c98不支持把变量声明写在循环的初始化部分,所以注意使用老版的编译器时要把变量定义写在外面

    int i;
    for(i = 0; i < 10; i++){
        //内容
    }
    

    java去掉了c语言中麻烦goto,取而代之的是给循环打上标签来跳出多层循环

    java可用标签(名字自定)快速跳出多层循环:

    loop:
    for(int i = 0;i<10;i++){
        for(int j = 0; j<10;j++){
            System.out.println(1);
            break loop;
        }
    }
    //程序的执行结果是`1`
    

    跨平台性

    c : .c ---> .exe

    java: .java ----> .class ---> jvm

    换平台时,如果是c需要重新写代码

    而java只需要重新换个jvm虚拟机,而虚拟机jvm是不需要我们写的,所以提高了代码的跨平台使用

    long与long long

    longlong long int short

    c里面的long和long long:

    long 4/8 (32位系统上位4字节,64位系统上是8字节)
    long long 8

    java删去了 long 4/8 和 long long 8

    直接就用一个8字节的long。确保了跨平台时不会发生内存的转变,而且由于内存长度确定,提高了代码的安全性

    bool与boolean

    c: 0 !0

    java : true false

    c: 0是假 ,非0是真

    java: true是真 ,false是假

    java里不存在“0是假 ,非0是真”的概念,boolean类型不能与任何类型进行类型转换。

    类型转换

    java是强类型的语言(比c强)。

    有时候c语言里允许的转换类型(隐式转换),

    在java里面却不被允许。注意区分

    逗号运算符,

    见文档最后-->

    c 和 java 的回收

    c语言的申请空间以及回收:

    #include<stdlib.h>//这个是必须引用的头文件,不引用会报告一个错误(而且这个错误的提示完全没用)
    int* a = (int*) malloc(sizeof(int));//申请
    free(a);//释放
    

    java只需要用new创建就行,不需要回收,回收由java自动进行。(所以一般java占用空间多)

    System.gc()//建议回收,仅仅建议,而且你不建议他也会自动回收,所以这个等于没用

    报错信息,如下标越界

    c不会提示下标越界,会直接把里面空间的数据拿出,由于不确定是什么数据,所以最终的结果是个随机值

    java下标越界会直接提示异常,不允许越界访问

    java比c的报错提示好,出现问题方便解决。

    问题-逗号运算符

    结论:逗号运算符的结果就是最后一个逗号上的内容。 1,2,3,4,5的结果就是5,原因如下:

    (上面的代码才是运算符的结果)

    解释一下问题,这个是运算符的优先级导致的,由于=的优先级高于,

    所以想得到1, 2, 3, 4, 5的结果,得先让,运算符计算,然后再赋值给a

    相关文章

      网友评论

        本文标题:关于C和Java

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