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

Java和C#,它们有多接近?,c#,java,comparison,C#,Java,Comparison,我一直在使用C/C++和Python,但现在我看到很多新的编程书籍都使用Java或C#作为示例 我认为我暂时不会使用Java或C语言,但我想我必须学习其中一种(或两种)语言才能阅读/理解这些书 Java和C有多相似?如果我学习Java,学习C#几乎是免费的吗?反之亦然 如果我只能选择这两种语言中的一种,哪种更好?在编程语言方面,哪个有更广泛的覆盖范围 自C#1.0以来不是1:1映射。C#添加了许多在Java中没有模拟功能的东西(LINQ、闭包等)。您一次问了几个问题。让我分别谈谈: Java

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

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

  • Java和C有多相似?如果我学习Java,学习C#几乎是免费的吗?反之亦然
  • 如果我只能选择这两种语言中的一种,哪种更好?在编程语言方面,哪个有更广泛的覆盖范围
自C#1.0以来不是1:1映射。C#添加了许多在Java中没有模拟功能的东西(LINQ、闭包等)。

您一次问了几个问题。让我分别谈谈:


Java和C有多相似

C#和Java都从C/C++(以及Objective C和其他语言)中汲取经验来定义它们的语法。它们都被编译成一种中间语言

这种共同的起源使两种语言在许多层面上看起来相似,以至于初学者可能会将两种语言中的代码混淆;同时也使运行时环境具有一定的可比性。然而,这两种设计原则以及每种语言的演变方式存在着实质性的差异,这使得使用每种语言的方式大不相同;以下是最突出的例子:

在语法层面上,Java受到Smalltalk的影响,而C#则试图更接近C/C++(例如:将Java的
扩展
实现
与C#的
符号进行比较),并从VB那里获得了一些不可映射到C/C++的概念的模糊启示(例如:属性语法)

在特性级别上,C#1绝对接近Java。在他们之间的一些差异中,我要强调C#对“不安全”代码(包括指针)和委托的支持;Java备受争议的
抛出了
。这是有道理的,因为C#的目标之一是成为Java的替代品

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

在API级别上,它们是天壤之别。C#依赖于.Net框架,该框架是基于微软在Visual Studio系列产品(因此明显面向Windows)方面的经验而构建的,而Java的类库是从零开始构建的IIRC,并且随着时间的推移而不断发展(在这个摇摆的日子里,有人记得AWT吗?我记得)

最后,值得一提的是,每种语言都有自己的习语,背后都有自己的支持者群体


如果我学习Java,学习C#差不多了吗 自由的反之亦然

都不是。关键的相似性是基本语法(分号、大括号、数组索引、大小写敏感度等),您已经从C/C++中获得了这些语法


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

简短回答:掷硬币。 详细回答:这取决于您的编码风格以及您最重视语言的哪些方面。我最好的建议是从两种语言开始学习,直到你觉得其中一种语言比另一种更能吸引你

或者,您可以查看


在编程语言方面,哪个有更广泛的覆盖范围

如果你指的是语言内置功能,我会说C#以微弱优势获胜。C#和Java所缺乏的大部分特性都是语法糖(尽管它们共同在学习曲线和语言使用方式上产生了显著的差异)。我非常重视C#的运算符重载和扩展方法。此外,LINQ是一个非常有趣的概念,但它本质上是循环的声明性语法


希望这能有所帮助。

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

为了说明我的意思,在这两种语言中,您要处理的某些对象可以通过从“object”到“generic object”再到“specific object”的继承来实现。在Java中,如果您想了解“generic object”的属性,您必须访问文档,而在C#documentation中,列出了“特定对象”的所有属性

至少在几年前我做Java的时候是这样的

如果你想要一个非常主观的答案。 我刚刚在英国完成了计算机科学的学位,我选择了一所教授C#而不是Java的大学……原因是,我可以很容易地直接进入一个高薪的工作,作为一名软件开发人员,在一家只需要了解“新”技术的人的公司工作

这些公司包括投资银行、科技初创公司、IT咨询公司等

所以如果你想挑一个来学习。。。。。。 想想最终目标……如果是现金和现代知识……遵循C

…如果有其他问题,请按照C#


p.S.Java很糟糕——我不得不说。

这里有一个很好的差异分解:这个问题很好,直到你问哪个更好。它们基本上就像是编程语言的郊区。拥挤,没有乐趣……除非他在说“更好”之后马上解释说,他真正的意思是覆盖范围更广,这是可以衡量的,而不是基于意见的(即:我应该选择收费高速公路还是高速公路,哪个更好?哪个车道的空间更大。)车道数或总宽度取决于意见??Java/C比C/C++有更多的共同点。@BlueRaja:Finally…:)@BlueRaja:你的意思是Java 7最终发布时会有闭包,这显然不会持续一年的大部分时间。我预测会有很多安全漏洞。@Goober只是一个问题