Java和C#,它们有多接近?[已关闭]

2022-09-01 02:36:14

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

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

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

答案 1

你一次问几个问题。让我分别讨论一下:


Java和C#有多相似?

C#和Java都借鉴了C/C++(以及Objective C等)来定义它们的语法。它们都被编译成一种中间语言。

这种共同的起源使语言在许多层面上看起来相似,以至于初学者可以将任何一种语言的代码与另一种语言混淆;并且还使运行时环境具有一定的可比性。但是,在设计原则和每种语言的演变方式方面存在实质性差异,这使得使用每种语言都完全不同。以下是最突出的:

在语法层面上,Java受到Smalltalk的影响,而C#试图更接近C /C++(例如:比较Java和C#的符号),并从VB中获得了模糊的灵感,这些概念无法映射到C / C++(例如:属性语法)。extendsimplements:

在功能级别,C# 1 绝对接近 Java。在它们仅有的一些差异中,我会强调C#对“不安全”代码(包括指针)和委托的支持;和Java的争议.这是有道理的,因为C#的目标之一是成为Java的替代品。throws

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

在 API 级别上,它们相距甚远。C#依赖于.Net Framework,它是基于微软在Visual Studio系列产品方面的经验构建的(因此在很大程度上是面向Windows的),而Java的Class Library是从头开始构建的IIRC,并随着时间的推移而大量发展(在这些Swing日子里,有人还记得AWT吗?我愿意)。

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


如果我学习Java,学习C#几乎是免费的吗?反之亦然?

也不。关键的相似性是基本语法(分号,大括号,数组索引,区分大小写等),您已经从C / C++中获得了它。


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

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

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


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

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

希望这有帮助。


答案 2

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

为了说明我的意思,在任何一种语言中,你想要处理的对象都可以通过从“对象”到“通用对象”到“特定对象”来实现。在Java中,如果你想了解“泛型对象”的属性,你必须转到文档,而在C#文档中,所有属性都列在“特定对象”中。

至少在我看来,几年前我做一些Java的时候是这样。


推荐