分享
 
 
 

C# v.s java 再贴+评点

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

从上次发表这篇文章,到现在已经被浏览了3000次。有些问题我还是能够继续争论下去。所以,把文章有贴了出来,同时加上了其它网有的评论,使它完整。希望大家踊跃发言,没有问题是讨论不清楚的。

另外,我再次声明:我没有攻击java的意思,也没有对java程序员又任何的不敬。

最近C#和java谁更好的争论已经有一段时间了,我也谈谈自己的感想。

其实单纯从语言上来讲,C#应该比java更具有优越性。为什么是应该呢?原因如下:

1) c#作为一种语言,比java语言出现晚了五年(差不多)。如果从“历史总在进步”这个观点来看,c#应该更好。这个理论在IT界并不总是成立,但考虑到微软的开发实力和经济实力,估计不会有很大的差别。

2) c#不是凭空产生的,任何一种语言都不是。C++吸取了C的长处,JAVA又吸取了C++的优点,历史就是这样进步的。而粗看一下c#的语法,简直是java的翻版。也就是说微软肯定吸取了很多java的的优点,而且做了

进一步的优化,放弃了一些缺点。据个例子来说:一个简单的字符串操作:

//java

String s1 = "aaaaaaaa";

String s2 = new String(s1);

//这是正确的,但s2和s1是同一个字符串呢,还是一个拷贝?这是一种容易引起误解的语法。

//c#

string s1 = "aaaaa";

string s2 = new string(s1);

//编译器通知错误,并且建议使用类似Clone的方法。

//c#避免了这个问题

除此之外,还有很多我们可以认为是c#由于java的地方。

上面谈到的是单纯从语言上来讲,但一种语言到底能够成功,能够成功多少,并不仅仅取决于这种语言本身。在编程语言的历史上,已经出现过几百种编程语言,其中不乏优秀的。但我们现在都没有使用,为什么?因为许多其它的因素,主要是指商业的。 有朋友说得很对,微软很会做市场,要不然他不会成为最有钱的公司。在美国经济下滑的今天,微软依然保

持了高速的发展。尤其是今年,垄断案取得了重大的进展;许多重大的商业计划的出台,如.net, xbox等等,连bill gates也说,我们从来没有像今年这样推出过这么多的新产品。对于微软的情况,我们可以从侧面得到线索。那就是在纳斯达克股市节节下滑,主要竞争对手sun, oracle, aol股票节节下跌的时候,微软的股票却上涨了80%。美国投资人对微软的信心从另外一个角度反映出微软2001-2002年的市场情况可能会非常好。

再说C#,这是微软的下个主要的平台的核心开发语言,其重要性不要于JAVA之对SUN。微软以已经花了几十亿美金,预计会有更多的美金会被花进去。可以说微软实际上把能否打败对手,在高端服务器市场的竞争上取得优势,从而决定微软将来的命运的宝压在了以C#为主要代表的.NET框架上。其来势非同小可。如果微软的市场运作没有出现很大的问题,.NET能够为微软挣的半壁江山,C#可以预见会成为很多人的编程利器。

所以我的观点,看市场对.NET的认同程度,不但可以看出C#,JAVA的兴衰,更可以看出微软,sun, oracle, aol的成败,进而看到美国乃至世界未来高科技乃至整个经济的趋势。未来的几年,如果不出意外,应该会是血雨腥风。

任何一种新的语言产生,都会受到质疑。今天java的疯狂支持者,有多少不是昨天还在抱怨java太慢,界面设计复杂的呢?我们期待C#的明天,也期待java的明天。

对该文的评论

qinglinmeng (2001-8-25 10:10:17)

人气值: 和 得票数: 反映出中国程序员对这种新技术的看法,证明中国的程序员至少是关注微软最新技术的。

谢谢各位参加这个民意测验。

lygwolf (2001-8-8 17:27:48)

同意qinglinmeng 的意见。

BILL的目的是统治所有计算机操作系统,跨不跨平台根本不重要,因为他想最后都是他的平台自然也不存在“跨”平台的问题了。

其实我的极崇拜BILL的,其市场运作手段当世无人能及!

vericky (2001-8-8 15:25:15)

> //java

> String s1 = "aaaaaaaa";

> String s2 = new String(s1);

> //这是正确的,但s2和s1是同一个字符串呢,还是一个拷贝?这是一种容易引起误解的语法。

dickmi,引起误会跟懂不懂java是两码事,对我而言确实认为这种误会是容易产生的,不要觉得自己没有误会别人就没有。大家都是为了研讨学习问题而聚在一起的,不涉及任何别的目的,难道不应该保持一定的矜持么?

dx (2001-8-8 15:24:41)

同意上述观点

而且,你不会这么无聊吧,已经用s1代替了"aaaaaaaaa".再用给s2赋值,吃饱了没事干吗?

program_cocogao (2001-8-8 14:40:23)

我支持微软!!!

zh9625 (2001-8-8 14:28:43)

就算C#真的优于java,我也希望sun,Oracle联合起来搞跨微软。

MS真的很讨厌,它搞出来的东西就是不想用。

我喜欢java。

chliang (2001-8-8 14:03:07)

这一开篇的引言就有问题, 也不知道发言者是不是java程序员, 我看过java的认证指南, 关于String的问题, 对于反复用的相同的字串, 应该用:

String s="...";

这样的模式, 这样java会为这个字串往"字串联营"生成"模版", 当出现

String s1="...";

时,"s1==s"了. 也就是说它们是引用同一"指针", 这样的好处在哪里?

当你要建好几个相同的字串的时候, 这样的机制就为你节约了内存. 反观C#, 如果clone方法就是原样复制一个的话, 那就感觉到不那么科学了, 当几个相同的String对象都很大, 那不就为相同的东西而浪费内存吗? 是让编程人员易懂还是让用户得益?微软会不会做出这样的抉择?不要因为你的不懂而让大家误会.

如果微软真的是这样来制作C#, 那C#本身也有大问题. 我还是那句话"微软真可恨".

qinglinmeng (2001-8-7 19:10:34)

qqchen79的观点:MS也在努力将.NET的虚拟机系统部分开放化,但恐怕很难有人在其它系统上实现。正是我们所不愿看到的,我私下揣测bill gates的目的,c#已经实现了中间代码,距离跨平台使用仅一步之遥,为什么就此止步呢?我们可以分析一下:如果微软公布技术标准,希望unix阵营支持c#。unix阵营只有两种选择:支持或不支持。

如果不支持,微软就有了一个很好的借口在.net平台上不支持java,这样,java也许就永远与桌面应用程序分离了。而微软却可以进军服务器领域,这对微软是一件好事请。

如果支持,sun肯定不会和高兴。sun的服务器价格非常高,毛利率非常大,原因还是他掌握着目前企业级开发的利器java,而且不愿产业化,只愿意自己独享。如果人们又第二种跨平台的开发语言选择,毫无疑问会动摇sun的基础。

如果上述的分析正确,微软公布c#的标准应该是一件有好处的事情。为什么微软迟迟没有呢?我的推测是bill gates心里想着怎样把unix灭掉。因为c#不能跨平台,就意味着标准的不兼容,就意味着两者始终竞争,不能共存。

开bill gates的传记,越看越觉得像。

yifanwu (2001-8-7 18:11:43)

dickmi 说得太对了!

wwtmw (2001-8-7 15:49:23)

good,so i don't plan to learn java

qqchen79 (2001-8-7 0:27:31)

C#确实比java再语言上有不少改进之处,但仅凭这些地方是很难吸引原先的Java程序员的。

Java与C#之间的选择绝不仅仅是语言的选择,而更多的是平台的选择。你是希望在windows平台上获得简单易用,功能强大的多重语言开发的优势呢,还是希望代码能够运行在不同的操作系统平台。本来这个问题的答案是显然的,但MS的windows/IE在Internet客户端的绝对优势使其悬而未决。MS也在努力将.NET的虚拟机系统部分开放化,但恐怕很难有人在其它系统上实现。.NET的另一个目标在于Wireless Devices, 在这方面,WinCE, ASP.NET和C#的结合还是有一定优势的。

至于C++/C/ASM体系,恐怕现有的语言根本无法取代其地位。至少,C#/JAVA是无法完全适用自身完成类库编写的,VM就更是无能为力了。最多也只能说Java和C#在一些专用领域会取代C++/C的地位。

所以:具体问题要具体分析。

wolfs (2001-8-6 23:09:36)

基本支持,不过不要太Bianjava了。

qinglinmeng (2001-8-6 19:34:41)

谢谢你们的评论,本来我发表这篇文章的目的就是为了引起大家的争论。因为这些问题,不争永远不会有正确的结果。

kiddycoffee和dickmi不赞同我对java语法一点小小的评论,我这里并不是说java语法错误。java的语法是没有问题的,这里的语法也不会产生二义性。错误和容易引起错误是两个概念。不要忘记,java设计的指导原则里有一个“简单”的原则,如果不是因为这个原因,java也不会去掉容易引起错误的多继承和运算符重载(c++的程序员曾经很不高兴)。

其实,对这个例子也不需要做深究。仔细对比一下,两个的语法不一样的地方就是micorsoft对java的改进。这种离子应该很多。

cashing ,如果想找到c#的编译器,最好去微软的站点上下载NGWS(next generation windows support),大约120M左右。

wentang163net,当初人们发明了c++的时候,人们欢呼雀跃,以为已经找到了最终的解决办法(直到今天,还有许多c++的支持者,去c++栏目看看就知道),可是现在呢?c++已经正在被下一代的语言取代。我也赞同你的观点,c#和java大同小异,但这是从语法上来讲,可是在这背后,隐藏着巨大的商业利益和竞争作为驱动。我们都是开发人员,说句实在话,哪儿有钱就奔哪儿,什么赚钱就学什么(是不是太实在了)。所以我不认为会java就不用c#。

duker,你的观点在现在是正确的,可是要用动态的眼光看待事物。如果没有互联网,就没有今天的sun, oracle;如果没有pc,就没有今天的微软;如果没有集成电路,就不会有ibm。历史真正的魅力在于不确定性。谁又能说微软不能在服务器领域取得进展呢?不要忘记,这是全球最大的软件开发商,又最多钱的公司,他的能力不容小视。而且,微软进入这个领域还有别人没有的资本,客户端的高度垄断(.net就是利用了着一个优势)。

谢谢大家,欢迎继续发言或来信 qinglinmeng@hotmail.com。

对了,dickmi,对去查一查dick在英文中的意思。

qinglinmeng (2001-8-6 19:34:29)

谢谢你们的评论,本来我发表这篇文章的目的就是为了引起大家的争论。因为这些问题,不争永远不会有正确的结果。

kiddycoffee和dickmi不赞同我对java语法一点小小的评论,我这里并不是说java语法错误。java的语法是没有问题的,这里的语法也不会产生二义性。错误和容易引起错误是两个概念。不要忘记,java设计的指导原则里有一个“简单”的原则,如果不是因为这个原因,java也不会去掉容易引起错误的多继承和运算符重载(c++的程序员曾经很不高兴)。

其实,对这个例子也不需要做深究。仔细对比一下,两个的语法不一样的地方就是micorsoft对java的改进。这种离子应该很多。

cashing ,如果想找到c#的编译器,最好去微软的站点上下载NGWS(next generation windows support),大约120M左右。

wentang163net,当初人们发明了c++的时候,人们欢呼雀跃,以为已经找到了最终的解决办法(直到今天,还有许多c++的支持者,去c++栏目看看就知道),可是现在呢?c++已经正在被下一代的语言取代。我也赞同你的观点,c#和java大同小异,但这是从语法上来讲,可是在这背后,隐藏着巨大的商业利益和竞争作为驱动。我们都是开发人员,说句实在话,哪儿有钱就奔哪儿,什么赚钱就学什么(是不是太实在了)。所以我不认为会java就不用c#。

duker,你的观点在现在是正确的,可是要用动态的眼光看待事物。如果没有互联网,就没有今天的sun, oracle;如果没有pc,就没有今天的微软;如果没有集成电路,就不会有ibm。历史真正的魅力在于不确定性。谁又能说微软不能在服务器领域取得进展呢?不要忘记,这是全球最大的软件开发商,又最多钱的公司,他的能力不容小视。而且,微软进入这个领域还有别人没有的资本,客户端的高度垄断(.net就是利用了着一个优势)。

谢谢大家,欢迎继续发言或来信 qinglinmeng@hotmail.com。

对了,dickmi,对去查一查dick在英文中的意思。

duker (2001-8-6 18:34:39)

java 不仅仅是一种语言,还是一个运行时环境,这个运行时环境可以被裁剪,比如说j2ee ,j2me,j2se

而c#仅仅是一种语言,它的运行时环境应该是 .net这套框架,java的运行时环境是明明白白公开的,

经过时间沉淀下来的,已经很稳定的东西了,.net呢,谁能公诉我什么地方有关于.net的官方规范。

ms的产品和技术从来就没有成为服务器领域的主流,而且从现在的发展趋势看,我觉得以后也不会。

ms的长处还是在人机交互设计方面,看看它把windows做得有多花就知道了。

wangyagang (2001-8-6 17:56:04)

java具有可移植多种os,而MS的C#???

kiddycoffee (2001-8-6 16:25:39)

> //java

> String s1 = "aaaaaaaa";

> String s2 = new String(s1);

> //这是正确的,但s2和s1是同一个字符串呢,还是一个拷贝?这是一种容易引起误解的语法。

不可思议。

wangzy (2001-8-6 16:09:30)

观点还可以!

wentang163net (2001-8-6 14:48:07)

任何一种语言都要经过它的幼年时期,C#也不例外。

问题是,现在我们有C++,有JAVA,还有多少人愿意再花时间来学习C#呢?尤其是在这种语言还没有被证明明显优于其他编程语言时?我个人认为C#与JAVA大同小异。

dickmi (2001-8-6 9:29:29)

> //java

> String s1 = "aaaaaaaa";

> String s2 = new String(s1);

> //这是正确的,但s2和s1是同一个字符串呢,还是一个拷贝?这是一种容易引起误解的语法。

拜托,不懂java 就不要出来乱放! 这个东西永远都不会引起误会! 这只能说明你对java只懂一点皮毛,甚至说脸皮毛都不懂!!!!!

cashing (2001-8-5 16:09:52)

怎样得到C#编译器?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有