从学习角度上说,很多人认为C语言单纯简单,其实比Java要容易。
我认为,如果要把本质学懂,确实如此,而且在学懂C语言的基础上再学Java的人往往会获得很好的效果。
Java中由于隐藏了内存分配的处理,反而不如C语言在内存管理上来的直观。
从应用角度上说,还是Java要容易很多的。
主要体现在以下几点。
1.内存管理
C语言需要自己申请内存,自己归还内存,总之什么事儿都得自己操心。你得记得自己在哪里借了内存,还 得搞清楚自己现在这个指针是指向Stack里的内存还是Heap里的,Stack里的还得记得啥时候作用域没 了……总之,步步惊心,一不小心就要年底被黄世仁讨债了。
而Java的内存管理,有了垃圾回收这个大妈帮着管了,你就只管借不用管还了。用完了往门口一扔,到时候自己就有人来拿回去了。
2.应用库
C语言相关的应用库也不能说不多,但比较杂,而且由于C语言的应用领域跟Java本身就不一样,所具有的应用库也不同。从说明来看,主要是指Web开发。那么要用C语言写一款应用服务器的话,通常可能要自己来学习HTTP协议、XML/JSON解析、还要自己研究内部的路径路由……总之一大堆破事儿等着 处理。 Java在这方面优势要明显很多。
你提到的JavaEE,Struts2,Hibernate,Spring等等都是现成的框架,你只需要按照框架规定填写业务逻辑就好了。解析HTTP协议之类的底层处理,框架都给你做了。所以,这里你的问题里提的不对等,C语言不学这些,只是老师没打算让你用C语言做Web应用罢了。如果做,你要学的知识会成倍增长的。
3. 跨平台
C语言是不具有二进制级别的跨平台性的。你在Linux上使用C语言和在Windows上使用C语言,所用到的编译器不同,涉及到与系统相关的调用,涉及到的函数、数据结构都会不同。这让C语言在跨平台开发的时候工作量成倍增加。不仅仅是跨操作系统,即便是同一种操作系统,总线位数不同,也会影响C语言的表现。
早期电脑都是16bit的操作系统(当然更早期还有8bit等更古董的),后来普及了32bit,现在基本都过渡到了64bit。每次升级,都可能让很多当年设计的不是很好的C语言代码完蛋。
Java语言自诞生之日起就以跨平台为宣传口号。虽然实际效果没有宣传的那么美好,但也确实大大降低了开发工作量。虽然随之而来的性能问题也一直被各方面诟病。在跨平台上,Java的优势极其明显。
为什么说 C 语言比 Java 难?
C语言的规则相对简单,规矩相对少。而这恰恰加大了使用难度。
围棋和象棋比较,围棋的规则相对简单,就两种棋子,棋盘上哪里都可以放子,一片子没有气就死了。虽然为了解决争议还有例如打劫之类的规则,但比起象棋兵种众多,每个兵种移动方式还不同,遇上国际象棋那种同一个兵种走路和杀人的时候步法还有差异的,动不动老王跟城堡就瞬间移动一下的规则,围棋的规则不可谓不简单。
然而,AI在象棋上战胜人类是在1997年,AI在围棋上战胜人类是在2018年?我觉得是否真的战胜了可能目前还有争议。足可见两者难度的差异。 C语言和Java也是类似的,越是规则简单的C语言越是难以掌握。
综上来看,C语言在使用上的难度要大大高于Java。在学习时,因为计算机是一门使用科学,如果学了不会用,基本等于没学,所以最终还是会落到使用难度上,如果要学到能做出同类东西的水平,自然是C语言难度要大一些了。
但是C语言的重要性依然还是不言而喻,作为编程语言的基石语言,想要深入了解编程,想要学习其他编程语言,你在先学好C语言之后,再入手学习其他编程语言就是相当于你掌握了武学的精义,其他的你都能够快速的掌握学习。
是我的个人经验分享,谢谢你的阅读,希望能帮到你呀!
大学想提升你的编程能力,成为一个强大的程序员找到一份好工作吗?不妨和一些志同道合的小伙伴一起学习成长!
C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地
有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!