Java与C#个人之比较

网上这方面的比较文章已经有不少了,不过大都是要么从很高的角度说的,要么就是从底层说的,本人就以自己这几年的编程经历中的感受,来谈谈自己的体会。

相似性:

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

个人猜测,在Java语言出现之前,C++被广泛使用,而且被认为容易使用,Java如此类似于C++,致使人们更容易接受;而现在Java是最广泛使用的,C#如此接近Java,则更容易吸引Java开发人员(仅仅是猜测)。也就是说Java站在C++的肩膀上,而C#站在了Java的肩膀上。

 

跨平台特性

跨平台特性的最大优点就是只要有相应的运行环境,同一个编译好的程序就能在上面运行,而不需要重新编译程序,它的缺点就是不能针对特定平台,所以不能充分利用平台特性,因而在性能上会有所降低,幸运的是现在的硬件比以前大大提高,这部分的降低在绝大部分情况下可以不用考虑。而且JavaC#都有自动垃圾回收机制,运行时环境可以自动清理不再使用的内存,减少了手动释放内存的风险。

Java的跨平台特性建立在可以跨越多个不同种类的操作系统平台,比如WindowsLinuxUnix等,但是需要注意的是不是说Java能在所有的系统上都能跨平台,必须实现在该操作系统上的Java运行时环境JRE才行,也就是说假如今天有人开发了一个前所未有的系统,这时候Java程序是不能在上面运行的——因为还没有针对这个操作系统的Java虚拟机(JVM),好在在当今绝大部分操作系统上都有针对该系统的JVM,所以它能“一次编译,到处运行”。

C#的跨平台则是建立跨Windows平台的基础上的(有一个针对非Windows.net运行环境,不过好像还不是太好),不像以前Windows95下的程序到WindowsXP下就不能运行,或者WindowsXP下的程序到Windows95下也不能运行(这种情况居多),现在呢,只要安装一个.net framework(也就是.net程序的运行时环境),在Windows2003下编写的.net程序不用重新编译就能在Windows98下运行,只要这台安装Windows98的机子安装了.net程序的运行时环境。

这一个回合Java胜出。

 

语法特性

Java抛弃了指针,使用了包(package)的概念,导入包使用import语句,在Java中有几种非面向对象的数据类型,那就是bytecharshortintlongfloatdouble这几种数据类型,在方法中传递时仅仅是传递它们的值,为了方便一些集合类的操作(它们存储的是对象类型),又增加了它们的包装类ByteCharShortIntegerLongFloatDouble

Java中存在属性的概念,这些都是通过setXXX()getXXX()来设置。

 

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

 

生成文档doc文档

在利用程序中的特殊注释生成api文档方面,两种语言都有不错的表现,不过C#更胜一筹,它能利用注释在输入类成员时提示,便于程序员不用去看程序源码而知道程序的大概用途,而Java这方面没有。

 

IDE(集成开发环境)方面

JavaIDE是非常多,从庞大的Jbuilder到小巧的Jcreator,还有可以扩充的Eclipse,可以说JavaIDE的数量是非常多的。

 

C#IDE不多,除了微软自己的VS.NET之外,好像还有BorlandC#Builder,除此之外,广为认知好像不多。

 

性能方面

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

 

企业开发方面

由于Java出现的时间长的缘故,并且还能跨平台,采用EJB等解决方案,所以目前绝大部分网站都是基于J2EE开发的(大部分都是J2EE+MySQL+Apache+Linux,都是免费的)。

 

C#做的大型网站,它也有针对EJBNet Remoting技术,由于它限制了必须(IIS+Windows),所以大型的网站不是太多,不过随着时间的推移,可能会有更多的网站采用asp.net技术。毕竟微软的东西一向傻瓜化,门槛低,能够吸引一些初级编程人员到这个行列中来。而且微软的asp.net采用了代码和页面分离技术,的确能方便编程人员。

 

总结:

记得有一句话,大意是这样的,Linux就像专业相机,拍摄出来的照片取决于你的摄影技术;而Windows就像傻瓜相机,只要会按快门就能拍照。我觉得Java就像Linux,添加一个按钮,一个标签都需要你指定样式,放置到哪里也需要你指定;而C#则继续秉承了Windows的特点,傻瓜化,便于操作,便于上手。

补充一点:好像搞Java的同等情况下比C#的高,可能是物以稀为贵吧:)。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java利用子类求正方形_Java程序设计实验2011

(2)掌握对象的声明和使用;(3)掌握构造方法的概念和使用;(4)掌握类及成员的访问控制符。2、实验任务(1)阅读下面的程序,在main()方法里添加语句完成如下的功能:①创建一个MyV alue类的对象myV alue。②为myV alue对象中的value域赋…

当导用模块与包的import与from的问题(模块与包的调用)

当在views.py里写impor models会不会报错呢? 1、Python里面的py文件都是每一行的代码。2、Python解释器去找一个模块的时候,只去sys.path的路径里找3、django项目启动(django项目的启动文件是manage.py)启动项目是将manage.py的路…

ack和seq

ACK (Acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。 seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认&#xff…

MySQL中的information_schema

0.引言 近日在学习网络安全的sql注入时,用到mysql中的information_schema数据库,其思路是利用information_schema中的SCHEMA获取数据库中的table名称。现在对相关数据库进行总结,方便以后复习使用。 2.information_schema数据库 informati…

linux配置防火墙,开启端口

linux配置防火墙,开启端口 Centos7,配置防火墙,开启端口  1.查看已开放的端口(默认不开放任何端口)    firewall-cmd --list-ports  2.开启80端口    firewall-cmd --zonepublic(作用域) --add-port80/tcp(端口和访问类型) --permanent(永久…

使用Intel编译器系列合集

好的帖子:http://topic.csdn.net/u/20080327/16/071b45df-3795-4bf1-9c4d-da4eb5aaa739.html参考手册:http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm 说明:本系列文章为个…

【前端】这可能是你看过最全的css居中解决方案了~

1.水平居中&#xff1a;行内元素解决方案 适用元素&#xff1a;文字&#xff0c;链接&#xff0c;及其其它inline或者inline-*类型元素&#xff08;inline-block&#xff0c;inline-table&#xff0c;inline-flex&#xff09; html部分代码:<div>文字元素</div><…

java手机一款三国游戏_JAVA热游—富甲三国之雄霸天下原创心得

因为工作忙碌的关系&#xff0c;很长时间都没有来关注手机游戏论坛&#xff0c;这款富甲三国.雄霸天下&#xff0c;我也是前天才拿到手。游戏比想象中的简单&#xff0c;个人仅用了两个小时时间&#xff0c;就将三个人物全部通关。游戏的开始画面制作得比较精美&#xff0c;而且…

Python多线程--互斥锁、死锁

1、互斥锁 为解决资源抢夺问题&#xff0c;使用mutex Threading.Lock()创建锁&#xff0c;使用mutex.acquire()锁定&#xff0c;使用mutex.release()释放锁。 代码一&#xff1a; import threading import time# 定义一个全局变量 g_num 0def test1(num):global g_num# 上锁…

freemind 要下载java_Freemind

动手编辑先按Ctrln&#xff0c;新建一个文件。这时出现了一个根节点。用光标单击它&#xff0c;改成“我学FreeMind”&#xff0c;然后在节点之外任一地方点击鼠标(或按Enter)完成编辑。然后&#xff0c;按Insert键&#xff0c;输入“下载安装”&#xff0c;按Enter键&#xff…

本地连不上远程mysql数据库(2)

Host is not allowed to connect to this MySQL server解决方法 今天在ubuntu上面装完MySQL&#xff0c;却发现在本地登录可以&#xff0c;但是远程登录却报错Host is not allowed to connect to this MySQL server,找了半天试了网上的一些方法都没有解决&#xff0c;最终在一篇…

理解EnterCriticalSection 临界区

通俗解释就像上厕所&#xff1a; 门锁了&#xff0c;就等着&#xff0c;等到别人出来了&#xff0c;进去锁上&#xff0c;然后该干什么干什么&#xff0c;干完了&#xff0c;把门打开 门没锁&#xff0c;就进去&#xff0c;锁上&#xff0c;然后该干什么干什么&#xff0c;干…

Python多线程--UDP聊天器

import socket import threadingdef recv_msg(udp_socket):"""接收数据并显示"""# 接收数据while True:recv_data udp_socket.recvfrom(1024)print(recv_data)def send_msg(udp_socket, dest_ip, dest_port):"""发送数据"&…

mvc:default-servlet-handler/作用

<mvc:default-servlet-handler/>使用默认的servlet来相应静态文件&#xff0c;因为在web.xml中使用了DispatcherServlet截获所有的请求url&#xff0c;而引入<scprit type"text/javascript" src"js/jquery-1.11.0.mim.js"/>的时候&#xff0c;…

java中如何做模糊查询_到底Java里的模糊查询语句该怎么写

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼现在String sql"select * from car where carName like %?%";可以查询出结果了&#xff0c;但问题又来了&#xff0c;只能查询出一条结果&#xff0c;代码如下carDao.java页面public ArrayList queryAppoint(String car…

vector 、map 、iterator 之学习笔记

由于本人要接手一项C方面 的工作。由于不会C,不过做过JAVA 以及一些web方面的开发&#xff0c;加之时间比较短。所以需要速成&#xff0c;于是学习笔记也基本都是用代码代替。 //范例资源文件 /****************************************************************************…

redis的密码验证,及哨兵的相关配置

背景我们知道&#xff0c;redis默认是不配置密码的&#xff0c;这就造成只要有redis的IPPort就可以无需验证&#xff0c;登陆redis。如果恰巧你的redis是开放在公网上的&#xff0c;很容易就被******&#xff0c;获取你的系统权限&#xff0c;经常被黑去当成了矿机。redis的安全…

tag的使用

tag True while tag:print("level")choice input("level>>>").strip() #作用是暂停 不会一直死循环if choice "quit":break #终止当前循环进入到上一层if choice "quit_all": tag False #不用一层层退出 直接退出整个…

pyecharts对于经纬度_一文带你掌握Pyecharts地理数据可视化的方法

本文主要介绍了Pyecharts地理数据可视化&#xff0c;分享给大家&#xff0c;具体如下&#xff1a;一、Pyecharts简介和安装1. 简介Echarts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Pyth…