目录

摘要

总体比较

细节比较

总结

摘要

由于本人在本科阶段的项目主要以Java语言为主,而且对找工作来说也是以Java为目标,但是在读研期间导师团队主要是以港口业务为主的CS应用开发,采用的是C#/.NET为框架,个人感觉Java和C#的相似度很高,但是二者还存在一些差别,所以在此总结了以下二者的区别和比较。

总体比较

其实无论哪种开发语言,都没有谁好谁坏的说法,只是不同开发语言的思想会有些不同罢了,以下列举了常见的开发语言用途比较(仅列举了常见的后端开发语言):

<caption> 开发语言比较 </caption>
C 操作系统、嵌入式、驱动开发
C++ 图形图像、科研、通信、桌面软件、游戏、游戏服务器
Java Java SE:跨平台的桌面应用,Android;Java EE:企业级应用,web开发、服务器后端;Java ME:手机应用、流行于非智能机时代;Java Android:用于安卓开发应用
C# Windows桌面软件、.NET Web、服务器
Go 高性能服务器应用,比较年轻
python Web、科学计算、运维

其实C#和java的异同可以说是90%的相同加上10%的不同。

细节比较

C#五花八门的特性要多很多。比较知名的有:委托,属性,真正的泛型,索引器,类初始化器,分部类,操作符重载,struct,unsafe代码,IDisposable等

Java比C#多的属性:

        匿名内部类:真是极端方便的一个东西,还和Java的好多设计模式有关系。

        动态代理: Java里面要实现AOP,易如反掌;C#要实现AOP,相对较难,不得不借助Assamble命名空间下的那些动态IL生成工具或者使用拦截器。这就是动态代理的作用。

        希望有一天C#可以拥有匿名内部类和动态代理,变得更完善。也希望Java也可以有委托等。

Java和C#都是一门面向对象的语言,Java更多地借鉴了C++的优点,而摒弃了它的一些不太容易被人掌握的知识点(有些不能说是缺点),并且增加了一些自己的特点,而C#则是更多地借鉴了Java的优点,而增加了一些自己的特点。也就是说Java站在C++的肩膀上,而C#站在了Java的肩膀上。

        跨平台性

                Java的跨平台特性建立在可以跨越多个不同种类的操作系统平台,比如Windows、Linux、Unix等,但是需要注意的是不是说Java能在所有的系统上都能跨平台,必须实现在该操作系统上的Java运行时环境JRE才行

                C#的跨平台则是建立跨Windows平台的基础上的

        语法特性

                Java抛弃了指针,使用了包(package)的概念,导入包使用import语句,在Java中有几种非面向对象的数据类型,那就是byte、char、short、int、long、float、double这几种数据类型,在方法中传递时仅仅是传递它们的值,为了方便一些集合类的操作(它们存储的是对象类型),又增加了它们的包装类Byte、Char、Short、Integer、Long、Float、Double。在Java中存在属性的概念,这些都是通过setXXX()、getXXX()来设置。

                C#没有完全抛弃指针(在unsafe状态下还可以操作指针),对于类的管理采用了名称空间(namespace)的概念,并且还使用了out、ref等关键字,便于从一个方法返回多个结果,在C#中不仅存在属性,还有索引器等比较方便的特性。

        性能方面

                Java采用了字节码(bytecode),而C#则采用了MSIL,它们的性能都是介于解释型语言和生成本地机器代码之间的,在一些测试中,C#的性能略高于Java,可能Java的字节码要适用多个系统多个平台的缘故吧。

总结

        Linux就像专业相机,拍摄出来的照片取决于你的摄影技术;而Windows就像傻瓜相机,只要会按快门就能拍照。我觉得Java就像Linux,添加一个按钮,一个标签都需要你指定样式,放置到哪里也需要你指定;而C#则继续秉承了Windows的特点,傻瓜化,便于操作,便于上手。 所以说,各有千秋 并没有哪个更好,看你对他们的了解和使用。