A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Java 和 C# 最大的不同是什么?


微软的c#设计者更注重一线开发人员的感受,为方便开发提高效率,他们愿意大费周章改善语言本身各方特性,不断加入语法糖,从泛型,nullable,隐式类型到lamada再到dynamic,awaitasyc等等都可看到其一直在围绕代码整洁,减少bug等实际的开发过程中问题来进行的改进,同时越来越智能的IDE也说明了这点。

而java设计者则不同,他们的关注点在于java应用系统本身,更好的降低耦合,保持OOP是其始终坚持的。同时也应该不难发现,社区对java应用架构师提出的各类尖锐问题反馈总是较为及时,而对java应用开发者则相对冷淡些。正因此,使用java开发的大型应用系统相比同等代码量c#开发出的系统至少在系统结构上要比c#更加美观,易维护,代码变腐烂的速度也更慢。加上java及linux均为开源产品,许多大型公司又在基于成本的考虑上最终还是选择使用java进行应用系统开发。

最后拿泛型举例看看c#和java对待同一问题时各方的区别:c#在2.0中为推出泛型特性是对预编译,编译及运行时做了根本性改变的,而java设计者则显然不够"诚意",他们在预编译期直接将泛型"处理"掉了,你在运行时根本看不到泛型这一特性。我臆测java设计者可能认为即使没有泛型,应用系统设计师通过优秀的程序设计是可以解决list类型不一致问题的,这种通过添加语法规则规避问题的做法实际是懒惰思维,添加了泛型支持也只是向社区的呼声做了一次妥协。
面对同一问题采用不同处理方法的结果是,c#基于泛型后续衍生出了lamada,linq等一系列更能提高开发效率的语法利器,而java因有了泛型的强制约束使得java开源中间件变得更加稳定,同时可以看到后续的许多开源中间件产品体量也变得更大,功能也开始更加大胆。这也算是通过泛型确保类型一致带来的好处之一吧。

所以,虽语法非常相似,但关注方向并不相同的两种语言至少目前来说区分优劣为时尚早了些,但就趋势来说,c#的发展势头要更为强劲,不去关注两种语言本身,就平台而言,微软对c#的掌控力要绝对优于java社区对java平台的掌控力,c#设计者在改造c#语言时不需要做出太多妥协,他们考虑最多的只是5.0如何向4.5兼容,4.5如何向4.0兼容,而java在发展的过程中每一步跨越需要考虑的则更多。同时,最要命的,java的一切设计都是牢牢基于面向对象的,然而从实际的开发经验来看,现实世界中的许多问题并不能单纯依靠面向对象来解决,牵强使用OOP给实际系统开发已经带来不少的负面影响,例如,红苹果到底是苹果的子类还是红色是苹果的一个属性?有人会觉得这要联系上下文才能知道究竟应该如何定义这颗苹果,然而联系上下文的过程本身就是一个寻找妥协的过程,可以符合当前系统设计要求,但,不代表系统需求不会改变,而在敏捷开发中,我们首先要树立的思想便是"需求是迟早会变的",这种矛盾在面向对象的开发过程中会长期相伴。回头再看c#,虽然其出身也是彻头彻尾的面向对象,然而在其后续的演进过程中似乎并未把OOP放在眼里,到c# 3时干脆加入了具有函数式编程特性的linq,而当其与原先就支持的委托特性结合时,其强大之处就可见一斑了,原先需要使用OOP思想编写的大量"难看"代码linq居然只要几行就能搞定,且更加符合自然语言表达。而java支持lamda似乎是linq推出整整6年(也许还不止)后的最近了。

回到问题本身来回答,综上所述,C#和JAVA的区别有很多,而最大的区别在于他们的语言(平台)设计者的关注点并不相同。


1 个回复

倒序浏览
最大区别。开发环境的语言和内置提示不同。C#没有提示敲出来的代码是会报错的。java不一样,。而且C#是全中文。java是英文...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马