Java和C#,它们有多接近?

时间:2010-04-12 21:17:02

标签: c# java comparison

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

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

  • Java和C#有多相似?如果我学习Java,学习C#几乎是免费的吗?或相反亦然?
  • 如果我只选择两种语言中的一种,那会更好吗?哪个在编程语言方面有更广泛的覆盖面?

5 个答案:

答案 0 :(得分:42)

你一次问几个问题。让我分开处理:


  

Java和C#有多相似?

C#和Java都来自C / C ++(和Objective C等)来定义它们的语法。并且它们都被编译成中间语言。

这个共同的起源使得语言看起来在许多层面上相似,以至于任何一种语言的代码都可能被初学者混淆;并且还使运行时环境有些可比。然而,两种设计原则以及每种语言的演变方式存在很大差异,这使得每种语言的处理方式各不相同;这里是最突出的:

在语法层面上,Java受Smalltalk的影响,而C#试图更接近C / C ++(例如:将Java的extendsimplements与C#的:表示法进行比较)从VB中获取了一些含糊不清的灵感来解释那些不能映射到C / C ++的概念(例如:属性语法)。

在功能级别上,C#1绝对接近Java。在他们遇到的少数差异中,我强调了C#对“不安全”代码(包括指针)和代表的支持;和Java的争议throws。这是有道理的,因为C#的目标之一是成为Java的替代品。

许多语言功能在实现细节方面存在很大差异。例如,枚举在C#上非常C'ish,但在Java中是完整的对象;或者泛型是在C#中的IL级实现的,但在Java中是通过类型擦除来处理的(除了语法之外,它们都不接近C ++的模板)。

在API级别上,它们是世界分开的。 C#依赖于.Net Framework,它基于Microsoft在Visual Studio系列产品上的经验(因此非常注重Windows),而Java的类库是从头开始构建的,IIRC,并且随着时间的推移而大量发展(在这些Swing时代,有没有人记得AWT?我这样做。

最后,值得一提的是,每种语言都有自己的习语,以及它背后的支持者社区。


  

如果我学习Java,几乎就是在学习C#   自由?反之亦然?

都不是。关键的相似之处是基本语法(分号,花括号,数组索引,区分大小写等),你已经有了C / C ++中的语法。

(免责声明:这个片段完全偏向主观)在我的案例中,我在2000年夏天学习了Java;并且变得像对它的仇恨一样,我不会碰它,除非我被要求将大学项目作为.class文件。我在2006年尝试了C#,并且对它非常满意:它远非完美,但它非常适合我的需求和风格。但是,我必须承认,Java早期很年轻,并且已经有了很大的改进:如果我现在从零学习它,我不会那么讨厌(但我不认为我更喜欢它超过C#)。


  

如果我只选择两种语言中的一种,那会更好吗?

简短回答:翻转一枚硬币。 答案很长:这取决于您的编码风格以及您最重视的语言的哪些方面。我最好的建议是从尝试学习两者开始,直到你觉得其中一种语言比另一种语言更强烈。

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


  

哪种编程语言覆盖面更广?

如果您的意思是语言内置功能,我会说C#获胜的范围很小。 C#和Java缺少的大部分功能都是语法糖(尽管它们共同对学习曲线和语言使用方式产生了重大影响)。我非常重视C#的运算符重载和扩展方法。另外,LINQ非常有趣,特别是在嵌套时,但我更喜欢经典的循环。

希望这有帮助。

答案 1 :(得分:3)

如果你想要一个残酷的主观答案。

我刚刚在英国完成了计算机科学学位,我选择了一所大学,教授C#而不是Java .........理由是,所以我可以很容易地直接进入高薪工作一个软件开发人员,公司只是想要了解“新”技术的人。

这些公司包括投资银行,科技创业公司,IT咨询公司。

所以如果你想选一个学习......

考虑最终目标......如果是现金和现代知识......请遵循C#。

....如果是其他任何内容,请按照C#

P.S。 Java很糟糕 - 我不得不说。

答案 2 :(得分:3)

有一个详细的比较:

http://www.25hoursaday.com/CsharpVsJava.html

答案 3 :(得分:2)

库非常不同,文档的方法也大不相同。我发现C#方法更容易。

为了说明我的意思,在任何一种语言中,您想要处理的某个对象可以通过从“对象”继承到“通用对象”到“特定对象”来实现。在Java中,如果要查找“通用对象”的属性,则必须转到doc,而在C#文档中,列出了“特定对象”的所有属性。

至少那是几年前我做一些Java时的回归。

答案 4 :(得分:1)

自C#1.0以来不是1:1映射。 C#增加了许多在Java中没有模拟的东西(LINQ,闭包等)。