C#和Java之间的主要区别是什么?

6

可能是重复问题:
C#和Java之间的主要区别是什么?

我相信是Eric Sink说过“C#是正确的Java”。我对Java非常熟悉,所以想尝试学习一些C#。

据我了解,这两种面向对象语言非常相似,那么实际上有哪些区别(如果有的话)?


13
C#是Java做得更好的语言。 - BlueRaja - Danny Pflughoeft
丰富的...回答你的第一个问题,如果你懂Java,那么学习C#会相对容易。回答你的主要问题,我建议你自己进行研究。 - Noon Silk
2
我喜欢这个分离的部分(如果有的话)。 - Michael Petrotta
我得同意BlueRaja的观点,因为...我不会Java xD...但说实话,我喜欢C#的原因是因为它...嗯...说真的,我没有理由。我输了,你赢了。 - Warty
@Michael:重复的问题有非常详尽的编程差异总结,感谢您的发布。 - Lars Andren
4个回答

8

我曾经在商业和业余项目中广泛使用过Java和C#,个人更喜欢Java庞大的开源社区,但是现在C#的工具和语言进步速度更快。

优点C#

Java比C#提前了5年,期间Java尝试了一些开创性的东西,并为C#提供了一些错误和最佳实践。这使得类库设计、泛型实现方式以及整体的完美程度有明显的差异。

此外,C#每隔几年就会引入一批强大、精心选择和良好集成的新语言特性(如LINQ、闭包、类型推断、动态变量类型、协变和逆变的通用支持等),让人感到非常愉悦。

令人惊讶的是,微软将从Haskell、JavaScript和Python等多种语言中直接引入一些最佳特性到C#中。所有迹象都表明,这种趋势将继续下去。

优点Java

另一方面,Java比C#提前了5年(如果考虑微软开始更加开放的时间更长),建立了一个社区。这导致NUnit是JUnit的一个移植,NHibernate是Hibernate的一个移植,通常情况下,N*是J*的一个移植。

你通常会从每种语言的相应社区中获得非常相似的一套令人难以置信的工具,但很多东西在Java出现之前就已经存在(因此更加成熟)。

总结

两者都值得学习,有很多东西可以从两者中学到。它们都拥有稳定的社区,对世界有稍微不同的看法。我建议了解两者,并密切关注它们的未来发展。


感谢您的详细回答sblom,这是对几个方面的很好总结。 - Lars Andren

3

谢谢!那些链接非常有帮助。 - Lars Andren

3

我简直不敢相信这个还没有被提到...

Java可以在许多不同的设备上运行(包括Win,*nix,Mac,手机,pas等),包括x86,arm和一些嵌入式设备,其操作码为字节码。

C#仅能在1个操作系统(如果你将2k、xp、win7 beta和win7视为“不同”的话,则为4个)和1种体系结构上运行。

有人会在此时提到Mono。Mono是一个错误;它是对.net的追赶者,但微软并没有起诉任何人,并声称他们可以。它不完整(永远不会完整),通常比真正的.net落后至少一个主要版本。


2
无论您是否认为Mono是一个错误,它肯定可以在非Windows平台上运行从C#编译的代码,从而使您的第三段无效。 - Jon Skeet
Mono确实可以实现这一点,但多平台性能是Java设计的基本原则之一。它被设计为在任何地方运行(几乎可以在任何地方运行!)。此外,Java具有开放的实现,并在GPL下发布。C#等同于Microsoft,语言的设计受到MS目标的支配 - 不管你喜欢与否,这是事实。 - trzewiczek
@Jon,NASM可以在非Windows平台上运行从汇编语言编译的代码。但这并不意味着输出是可移植的。 .NET可以在Mono上运行:除非你使用了window.forms、linq-to-sql、wpf、wcf、wf、system.management或system.enterpriseservices。或者.NET 4.0。或本地代码。Mono只是以与C++相同的方式“跨平台”。 - KitsuneYMG
@kts:编程语言是可移植的,即使不是所有的库都是。你应该区分这些东西。例如,有人可以完全轻松地使用标准C#和我的Protocol Buffers端口编写一个Mono应用程序。他们可能想要针对GTK#而不是WinForms——谁知道呢?关键是它是在非Windows上运行的C#。如果你想声称.NET本身只能在Windows上运行,那就是完全不同的问题了。 - Jon Skeet
1
@Jon NASM,这种语言也是“可移植”的。只要有足够的时间,我可以为任何ISA编写一个解释语言仿真器,并使其“可移植”。C#和.NET在设计上紧密集成。除非有人明确限定他们的陈述,否则我和大多数人都会认为是C#/.NET。 - KitsuneYMG
2
@kts:NASM不是一种语言,而是汇编器。哪里有“NASM语言规范”?我不相信你真的看不出一个被设计成可移植的语言和在非Windows平台上确实有VM的语言与一个故意针对x86和x64的语言之间的区别。简单的事实是,我可以坐在我的Linux工作站上,创建一个C#程序,编译并运行它。这完全违背了你的帖子。你没有认识到.NET和C#之间的区别,并不能消除这种差异。这个问题谈论的是语言 - Jon Skeet

2

相比于C#(或.NET),Java可以在更多的平台上运行。


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