Java和C#有多接近?

44

我一直在使用C/C++和Python,但现在我发现很多新的编程书籍都使用Java或C#作为示例。

我暂时不打算使用Java或C#,但我想我必须学习其中一种语言(或两种)才能阅读/理解这些书籍。

  • Java和C#有多相似?如果我学习了Java,学习C#是否几乎免费?反之亦然?
  • 如果我只能选择其中一种语言,哪种更好?哪个在编程语言方面覆盖范围更广?

5
以下是差异的很好的分解:http://stackoverflow.com/questions/610199/the-art-of-programming-java-vs-c - CAbbott
6
这个问题本来不错,直到你问哪一个更好为止。 - Tyler Crompton
它们基本上就像编程语言的郊区。拥挤,没有乐趣可言。 - Erik Reppen
1
除非他在说“更好”的时候立刻解释了他的真正意思是更广泛的覆盖范围,这是可以衡量的,而不是基于观点的(例如:我应该走收费高速公路还是普通公路,哪个更好?哪个车道更宽敞)。车道数量或总宽度是否充足是主观的吗? - osirisgothra
Java / C#与C / C ++相比有更多的共同点。 - Thomas Eding
4个回答

56

您一次性提出了多个问题。让我分别回答:


“Java和C#有多相似?”
“Java和C#都从C/C++(和Objective C等其他语言)中汲取了语法的灵感。并且它们都被编译成了中间语言。”
“这个共同点使得这两种语言在许多层面上看起来很相似,以至于初学者可能会混淆两者之间的代码;同时也使得运行时环境有些可比性。然而,它们在设计原则和语言演进方面存在重大差异,这使得使用每种语言都有很大的不同。以下是最显著的差异:”
“在语法层面上,Java受Smalltalk的影响,而C#试图更接近C/C++(例如:将Java的extends和implements与C#的:符号进行比较),并在那些不能映射到C/C++的概念上从VB中得到模糊的启示(例如:属性语法)。”
“在功能层面上,C# 1与Java确实很接近。他们之间唯一的几个区别是,我要强调C#支持"不安全"代码(包括指针)和委托;以及Java备受争议的throws。这是有道理的,因为C#的目标之一是成为Java的替代品。”
“许多语言特性在实现细节上存在很大差异。例如,在C#中,枚举非常像C,但在Java中是完整的对象;或者泛型是通过IL级别在C#中实现的,而在Java中则通过类型擦除处理(除了语法之外,两者都不太接近C++的模板)。”
在API级别上,它们有很大的差异。C#依赖于.NET Framework,后者是基于Microsoft在Visual Studio产品系列方面的经验构建的(因此与Windows密切相关),而Java的类库则是从头开始构建的,并随着时间的推移不断发展(在这些Swing天,还有人记得AWT吗?我记得)。最后,值得一提的是,每种语言都有自己的习惯用语和支持者社区。
如果我学了Java,那么学习C#就几乎免费了吗?反之亦然吗? 都不是。它们的相似之处在于基本语法(分号、花括号、数组索引、大小写敏感等),而这些你已经从C/C++中掌握了。

如果我只能选择两种语言中的一种,哪种更好?

简短的答案:抛硬币。 长话短说:这取决于你的编程风格和你最重视语言的哪些方面。我的最佳建议是尝试学习两种语言,直到你感觉其中一种语言比另一种更吸引你。

或者,您可以查看http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp


如果你指的是语言内置功能,我会说C#略胜一筹。C#拥有的大部分特性Java都没有,但它们大多是语法糖(虽然这些特性对于学习曲线和语言使用方式来说都有显著的影响)。我非常重视C#的运算符重载和扩展方法。此外,LINQ是一个非常有趣的概念,但本质上它只是循环的声明式语法。
希望这可以帮到你。

8
相似之处到此为止。接下来指出了 3 个不同之处。说真的……它们确实非常相似。在我看来,一个 C# 或 Java 的新手读到一半的 C# 程序后,可能无法确定它是 Java 还是 C#。天哪,我自己工作中同时使用这两种语言,当我刚开始时,唯一显而易见的区别就是编码风格约定(即 C# 中方法定义后大括号在下方)。 - Don Cheadle
1
@mmcrae:我同意这是一个糟糕的答案,不知道它是如何得到赞成的,我会称这两种语言也非常相似(至少在主要部分上)。在这里,这个话题被更好地处理:https://msdn.microsoft.com/en-us/library/ms836794.aspx#tchwhatssimilarbetweencjava - Giorgi Moniava

3
图书馆非常不同,而且文档编写方法也很不同。我发现C#的方法更容易。
为了说明我的意思,在任何一种语言中,你想要处理的某个对象可能是通过从“对象”继承到“通用对象”再到“特定对象”来实现的。在Java中,如果你想要查找“通用对象”的属性,你必须去查找相应的文档,而在C#文档中,所有属性都列在“特定对象”下。
至少在几年前我做Java时是这样的。

3

如果你想听一个极度主观的答案。

我刚刚在英国完成了计算机科学学位,我选择了一所教授C#而不是Java的大学……原因是,这样我就可以轻松地进入一家只想要懂得“新”技术的软件开发公司,并获得高薪工作。

这些公司包括投资银行、科技初创企业和IT咨询公司。

所以如果你想选择其中一种进行学习......

考虑最终目标......如果是金钱和现代知识......那么选择C#。

......如果是其他任何事情,也选择C#。

P.S. Java太糟糕了——我必须这么说。


3
只是出于兴趣,哪个大学教授C#而不是Java?我曾在伦敦城市大学读书,几乎所有的编程都是用Java(实际上有点让我生气)。 - E Shindler
2
Java很糟糕 - 每个人都认为他们学习的第一门/唯一的语言是最好的。而@EShindler - C# / .NET在大学中确实不太常见,我很惊讶地发现美国的一些大学使用.NET。例如北伊利诺伊大学。 - Don Cheadle

1

自C# 1.0以来,它并不是一对一的映射。C#添加了许多Java中没有的东西(如LINQ、闭包等)。


@BlueRaja:终于... :) - Lucas Jones
3
@BlueRaja: 你的意思是,Java 7在最终发布时将会有闭包,而这似乎需要等待大部分一年的时间。 - Dave Kirby
我预测会有很多安全漏洞。 - Erik Reppen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接