C#和Java的对比
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就语言层面来说,是不分伯仲的,有差距的是使用编程语言的人,就像我们不能说剑比刀差,而要看使用刀剑的人的武功——真正对信息化成败起到决定性作用的是程序员,是公司。
C#和Java的对比的更多相关文章
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的“不失败”机制3 3. Guard 4 4. swift的新语 ...
- JAVA语言对比C++语言的几个优点和自身的关键特性
之所以写这篇博客不是为了比较JAVA语言和C++语言到底孰优孰劣,而是从语言本身出发进行对比总结程序编码设计上的差别.因水平有限,某些内容可能太过片面,欢迎指正和讨论. JAVA语言在设计上很好地借鉴 ...
- java操作对比两个字符串,将差异数据提取出来
记录瞬间 在实际的工作中,需要解决生成两次字符串结果进行对比的问题,将存在差异的字符串直接给出来. 当然,前提是需要将对比的两次结果,进行前期处理 比如: a_str = "@com/ene ...
- C++ 与 Java 语言对比
1 . Java 是完全封装的,而 C++ 的函数是可以定义在 Class 的外部的.从这里就可以看出 C++ 的 OO 思想不够彻底,至少在封装这一点上. 2. C++ 中有拷贝构造函数,可以把一个 ...
- java语言对比,jvm,垃圾回收
1.java/c++/ruby/python集中语言的对比 java和c++ 1,没有指针 2,没有多继承 3,没有const 4,在实现多态上的区别 tc++里面的虚函数,纯续函数和java里 ...
- .NET和JAVA 反射对比
反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息.使用反射可以看到一个程序集内部的接口.类.方法.字段.属性.特性等等信息.在System.Reflectio ...
- C#和java的对比及总结
1.Java里的AClass.class得到的Class<T>类的对象对应C#的typeof(AClass)得到的Type类型的对象:(但是C#如果要反射创建对象是用Type对象的Asse ...
- Java中对比两个对象中属性值[反射、注解]
在Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较.如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪 ...
- php和java优势对比
PHP很专一,用于创建动态网页的服务器端的脚本语言.作为一种为Web而特别设计的语言,PHP带来了许多商业机构渴望的特性. ·学习周期短,比较简单 ·快速的开发时间 ·非常高的性能 这 ...
随机推荐
- Python通用函数实现数组计算
一.数组的运算 数组的运算可以进行加减乘除,同时也可以将这些算数运算符进行任意的组合已达到效果. >>> x=np.arange() >>> x array([, ...
- Linux(ubuntu)下创建用户没有创建家目录
添加-m参数即可: sudo useradd -m username #参数-m 自动创建用户的家目录 得解也.本来是会自动创建的,但是如果使用ll命令查看没有被创建的话,则应该使用此命令来创建新用户 ...
- 【Gradle】Gradle构建脚本基础
Gradle构建脚本基础 Settings文件 在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置.设置文件的默认名为settings.gradle,放在根工程目录下. 设置文件大多数的 ...
- Android MediaRecorder录制播放音频
1.请求录制音频权限 <user-permission android:name="android.permission.RECORD_AUDIO"/> RECORD_ ...
- 大数据安全利器ranger 编译安装
ranger大数据领域的一个集中式安全管理框架,它可以对诸如hdfs.hive.kafka.storm等组件进行细粒度的权限控制.本文将介绍部署过程 1. 部署准备 ranger: 进入apa ...
- VMware Tools安装方法
安装VMware Tools的步骤 点击[虚拟机]选项中的[安装VMware Tools],此时在Ubuntu的桌面上就会出现一个光盘图标. 如果之前已经安装过了,[虚拟机]选项中应为[重新安装VMw ...
- CentOS7使用docker搭建Solo博客
一.获取最新镜像 docker pull b3log/solo 二.启动容器 使用 MySQL 先手动建库(库名 solo,字符集使用 utf8mb4,排序规则 utf8mb4_general_ci) ...
- 8.Python网络编程_多线程死锁
死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 ...
- 平方,立方,n次方,上标/下标
选种你需要的上标,如2,右键设置单元格格式:选择上标,确定即可: 最终效果:
- 日志分析利器Splunk的搭建、使用、破解
博主对splunk的了解不多,博主的使用目的是为了同步,分析日志.当初的搭建也是为了公司申请牌照需要日志服务器分析日志,顺便自己也对这方面感兴趣就买了本书看了看搭建玩的,后来检查来了博主也给他们演示了 ...