首先可以看一下两个语言的由来历史。
最初是微软公司的老对头Sun公司推出了java语言,并且获得了Oracle公司和IBM公司的大力支持,微软作为老大哥肯定是不服气啊,他也需要一门新语言来对抗新兴java势力,所以在Anders Hejlsberg的帮助下,开始了C#语言的研发。事实上,C#与Java确实有着很多相似的地方,但也有细微的差别。但要说哪个语言更好,这个问题是无解的,只能说是各有所长。对于编程人员来说,萝卜青菜,各有所爱。况且很多同行两种语言穿插使用,不论这是我们的人格分裂还是心之所向,结局还是会最终指向一个结果。
结果不是0就是1
目前看来java所占比重要远大于C#所占比重。其中个人认为并不能排除商业公司跟风的原因,C#真的比java差这么多吗,答案是否定的。
这里我找到一篇比较客观明朗的发言:
由于微软将C#作为一个产品来开发,c#的设计者更注重一线开发人员的感受,为方便开发提高效率,他们愿意大费周章改善语言本身各方特性,不断加入新特性和新字段等等都可看到其一直在围绕代码整洁,减少bug等实际的开发过程中问题来进行的改进,同时越来越智能的IDE也说明了这点。
而java设计者则不同,他们的关注点在于java应用系统本身,更好的降低耦合,保持OOP(面向对象)是其始终坚持的。同时也应该不难发现,社区对java应用架构师提出的各类尖锐问题反馈总是较为及时,而对java应用开发者则相对冷淡些。正因此,使用java开发的大型应用系统相比同等代码量c#开发出的系统至少在系统结构上要比c#更加美观,易维护,代码变腐烂的速度也更慢。加上java及linux均为开源产品,许多大型公司又在基于成本的考虑上最终还是选择使用java进行应用系统开发。
所以,虽语法非常相似,但关注方向并不相同的两种语言至少目前来说区分优劣为时尚早了些,但就趋势来说,c#的发展势头要更为强劲,不去关注两种语言本身,就平台而言,微软对c#的掌控力要绝对优于java社区对java平台的掌控力,c#设计者在改造c#语言时不需要做出太多妥协,他们考虑最多的只是5.0如何向4.5兼容,4.5如何向4.0兼容,而java在发展的过程中每一步跨越需要考虑的则更多。同时,最要命的,java的一切设计都是牢牢基于面向对象的,然而从实际的开发经验来看,现实世界中的许多问题并不能单纯依靠面向对象来解决,牵强使用OOP给实际系统开发已经带来不少的负面影响,虽然C#也是基于面向对象,但却没有这么严格,早早的推出了lamda表达式,而java支持lamda似乎是linq推出整整6年后了。
面试时问C#与java的异同可以简单的阐述几点,因为细节还是比较多的。
相同点:1.都是面向对象语言
2.都可以实现跨平台(C#的跨平台逐渐完善)
不同点:1.部分语法不同
2.数据类型有部分差异
3.开发周期方面c#比java开发周期更快
4.java出现的时间更长、开源性广、跨平台性更好
5.C#比java多一个访问修饰符
等等。。。