C#和Java

微软更注重开发人员的效率,不断加入语法糖,从泛型再到Lamada,linq等,都大幅度提高了开发效率。
而Java设计更关注于应用本身,保持OOP的思想。同时Java的社区和开源项目 活跃程度高,有许多开源中间件和大量的现成解决方案,在企业大型应用开发时,Java的大型应用成本效率都有优势。

因为正在学习C#,才堪堪看到C#的大门,能清楚感受到C#在细小语法和编码习惯上与Java的不一样。

委托,类似于指针函数。
这个是C#之于Java的最大优势,可以用于实现事件和回调方法。
回调方法类似于事件触发,比如敌国战机出现在国土内就会触发警报系统,通知军区(在回调方法里实现通知操作)。这就是一个回调方法。
虽然Java可以通过接口,匿名内部类实现委托一样的功能,但很麻烦。
而在实现多个委托的情况下,只需要使用+号将委托相加就行了。这同时应用于C#的事件。

操作符重载
在委托中+号可以实现委托的相加,这体现了C#操作符重载的特性。
C#可以重写操作符的方法,可以自定义操作,在处理对象信息的时候能够提供方便,例如对象姓名的相加,对象年龄的统计等。

泛型
在Java和C#中都支持泛型,而Java是伪泛型,是通过类型擦出,在使用泛型时加上类型参数,但在编译时去掉,所以Java的字节码中是不包含泛型的信息。
所以在Java当中,ArrayList\ArrayList\ArrayList是一个类,在Java编译器中是编为GenericClass,所以泛型信息对虚拟机来说是不可见的。当然Java为了兼容性不得不使用假泛型,所以Java的泛型更像语法糖。
C#泛型不管是在源码还是程序编译阶段的IL(类似Java 的字节码,中间语言)还是运行期的CLR(C#的虚拟机),都是切实存在的,List/List就是不同的类型,有自己的虚方法和类型数据这种方法生成泛型为真正的泛型。

说起泛型,就得说说索引器
允许一个对象可以像数组一样使用下标的方式来访问。这在Java是没见过的,当为类定义一个索引器时,该类的行为就和数组一样了。
C#通过索引器可以直接用数组的方式拿取元素。
例如一个泛型list,可以通过list[0],取得list中的第一个数据。是可以提高开发效率,减少代码的编写。

最后是在性能上。
我觉得完全可以相信微软和Oracle的实力。
Java采用了字节码(bytecode),而C#则采用了MSIL(微软中介语言),它们的性能都是介于解释型语言和生成本地机器代码之间的。虽然在一些测试中,可能C#的性能略高于Java,但我觉得这不是实际的生产环境,不能完全得出C#性能就是高。着JVM、CLR等技术的发展,语言特性对高性能计算性能影响越来越低,而且虽然C#语法糖很多,能提高开发效率,但相对Java仍是没有形成技术革命的差距。并且现在服务端的开发语言不再是单一,有Go,Rust,Java,C++,C#,scala,python,Node.js等等,在自动化部署方面的Rust,在更高效率的业务开发方面的Go,服务器底层的C/C++等等,所有语言各司其职。很难就单一的说C#性能好还是Java的性能好,并且现在两种语言的技术仍在更新迭代,新版本的CLR和JVM都更新了更多的特性,提供了更高效率的开发,所以我们可以完全相信微软和Oracle的实力,能让语言的性能不断优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值