CSDN博客

img qinglinmeng

C# v.s java 再贴+评点

发表于2001/9/8 17:36:00  565人阅读

 

从上次发表这篇文章,到现在已经被浏览了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)

基本支持,不过不要太Bian java了。
    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#编译器?

0 0

相关博文

我的热门文章

img
取 消
img