今天我想写一些关于我这些天所学到的C和Java的区别。这几天白天老师讲Java,可我为了考研,手里捧着《C语言程序设计》,然而我在大学里是C++入门的,故脑子里的体系结构大都是C++的。这就导致了,我现在宛如一个智障。老师每讲一个Java的知识点,我都在想C++里是啥样的,然后再看看手里的书,看看C语言又是啥样的,简直头晕。这几天我清醒了不少,所以我打算整理一下我这几的收获。
1.C是面向过程的,Java是面向对象的。Java里面有类,C里面没有,C++里面有,C++里面的结构体可以写函数,C不行。总而言之,C语言就别拿面向对象的思路写代码,等于白给。
2.C跟C++有指针,Java没有。这个显而易见。
3.Java,C,C++中,只有C++有引用传递。
4.C++的模板与Java中的泛型很像。但是还是有区别的。C++ 模板是宏命令,比如List<A> 和 List<B> 实际上是两个不同的类。而Java 泛型类中,类型 ArrayList<Integer> 和 ArrayList<String> 的对象共享相同的类,并且只存在一个 ArrayList 类。编译器实施类型约束,并且运行时没有关于泛型的类型形参的任何信息,是通过擦除 来实现的。
5.一个小细节,C里面声明数组是int a[10]; 而Java中则是int[] a=new int[10];或者int a[]=new int[10]; 这就导致用习惯Java的第一种写法可能就下意识写错C的数组。QAQ
6.C语言中函数随便声明在哪都行(比如main函数在上面,被调用的函数在main函数下面),但是C++中要使用必须先声明,即,声明必须在调用上面。当然,如果C如果不声明,一旦函数有问题就会出现运行错误,反之就只是语法错误,即还是建议该声明就不要省。
7.C语言中,用数组元素作实参中,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址。