C#和Java的对比
C#是微软公司在2000年6月发布的一种面向对象的高级程序设计语言;Java是Sun公司在1996年1月发布的一种面向对象的、平台独立的高级程序设计语言。它们是现在最流行的面向对象的高级程序设计语言,人们经常会拿两者进行对比。
1. 关于运行速度
就语言层面来说,C#和java的运行速度非常接近,有权威机构利用C#和java采用相同的算法,运行速度测试对比:文件读写1000次,并存储到集合当中。C#平均时间:150-200毫秒、Java平均时间:220-300毫秒。1000毫秒等于1秒,这个速度其实是非常的接近的。
程序的运行速度最关键的在于算法逻辑。抛开编程人员的技术水平或者采用的算法效率,直接说java快于C#,或者C#快于java都是不负责任的。
2. 关于安全性
就语言层面来说,C#和java 的安全性都很高。他们都严格遵循面向对象的规范,封装细节,只提供接口给用户;都有边界检查,不会出现C/C++中的缓存溢出等安全漏。都是强制类型转换,支持线程;都有自动垃圾回收器,可以防止内存泄露的风险。都通过编译器、检验器、类装载器、建立安全策略等方式保证了程序的安全性。唯一的区别是C#支持指针,而java无指针运算,增加了内存级的安全性。但是C#仅仅是支持指针,并不鼓励指针,有经验的开发人员都会避免使用指针,保证程序的安全性。同理,如果低水平的java开发人员,即使有垃圾回收器,也会写出内存泄露的代码。
3. 关于开发速度和语言特性
就开发速度而言,C#是比java要快很多的,这一点无法否认。C#诞生时间比较晚,在设计之初就吸收,借鉴了java的很多优点,同时又有所创新,它易用、门槛低、优雅、非常简洁,有许多更加简洁高效的语法,可以大大提高开发速度。比如C#2008年就支持lamda表达式,java2014年才支持。再比如event和委托,var,linq,java直到现在都没有对应的语法。微软提供的专用编程工具VS更是极大的提升了开发速度。Java相对来说开发过程更加繁琐,配置环节更多,同水平的开发人员,使用java的开发速度相对C#要慢。
4. 关于生态和开源
就开发生态而言,Java强于C#,这点毋庸置疑。Java诞生早,Sun公司在2006年就宣布开源,13年来在开发生态上,已经取得了非常大的成绩。C#诞生晚,微软公司更是拖到了2014年才将其开源,至今不过5年时间。在开发生态上,C#远远落后于java。但是微软公司最近几年在开源动作上越来越主动和积极:全面宣布C#和.net开源;连续多年成为全球最大的开源贡献公司;2018年收购了最大的开源代码平台github。反观java在2009年被oracle收购后,在开源上的动作原来越少,权限越收越紧,导致谷歌的安卓系统都已经着力采用新的语言Kotlin以期待替换掉java,摆脱oracle的控制。
5. 关于平台可移植性
Java设计之初就考虑到了跨平台,而C#在设计之初只考虑了windows平台,平台移植性不如java,不过这个差距现在已经被拉平。2014年开源之后,C#的底层平台同时支持.NET Framework和.NET Core,而NET Core是完全重新架构设计的,能够完美的支持跨平台。
6. 结论
综上,其实C#和java就语言层面来说,是不分伯仲的,有差距的是使用编程语言的人,就像我们不能说剑比刀差,而要看使用刀剑的人的武功——真正对信息化成败起到决定性作用的是程序员,是公司。