比较C#和Java

时间:2020-03-06 14:23:37  来源:igfitidea点击:

我在大学期间学习过Java,然后被一家Cshop聘用并从此使用过。我花了第一周的时间意识到两种语言几乎相同,接下来的两个月找出了一些细微的差异。在大多数情况下,我是否注意到Java没有C的东西,因此大多感到沮丧。 (例如:枚举类型是成熟的类,而不仅仅是带有新涂层的整数)我此后开始欣赏Cworld,但我不能说我很了解Java,以至于不能真正将两者进行对比,所以我我很好奇要得到一个社区的横截面。

Cand Java的相对优缺点是什么?这包括从语言结构到可用的IDE和服务器软件的所有内容。

解决方案

要记住的另一件事,我们可能还想比较它们各自的VM。

比较CLR和Java VM将为我们提供另一种区分两者的方法。

例如,如果执行繁重的多线程,则Java VM具有比CLR(.NET等效)强大的内存模型。

这不是已经做完了吗?归根结底,关键不是工具,而是我们如何使用它们。

使用WPF追求更好的GUI,这是Java传统上不擅长的。

Chas LINQ相当不错。

否则,这两个实际上是相同的。我们如何看待.NET首次推出时它们如此迅速地创建了这么大的类库?从那以后,情况有所变化,但从根本上讲,C可以称为MS-Java。

一个区别是Ccan可以更好地与Windows一起使用。这样做的缺点是,除了Windows以外,它都无法正常运行(也许除了Mono,我还没有尝试过)。

不要将其视为一种意见,但就我个人而言,我不能忍受Java的GUI。它与Windows足够近,但距离Windows还很近,所以它进入了一个令人难以置信的山谷地带,真让我感到不高兴。

C(和其他.Net语言,我想)使我能够制作完美融合到Windows中的程序,这让我感到高兴。

当然,如果我们不谈论开发桌面应用程序,那是没有意义的。

Java的:

  • Java中的枚举会引起很大的反响,甚至不有趣。
  • Java支持通用方差

C#:

  • C#不再局限于Windows(Mono)。
  • Java中缺少关键字internal实在令人失望。

你说:

enum types which are full-fledged classes, not just integers with a fresh coat of paint

我们实际上看过输出了吗?如果我们使用inum来编译应用程序,然后阅读CIL,我们会发现enum实际上是从System.Enum派生的密封类。

诸如Red-Gate(以前称为Lutz Roeder's)的Reflector之类的工具会在尽可能接近原始Cas的情况下将其拆开,因此可能不容易看到引擎盖下的实际情况。

在这两种语言之间进行比较和对比可能会非常困难,因为在许多方面,与我们所使用的语言相关联的关联库可以最好地展示彼此之间的各种优势。

因此,我将尝试列出我能记住或者已经发布的尽可能多的内容,并指出我认为具有优势的内容:

  • GUI开发(厚或者薄)。 C#与.NET相结合目前是更好的选择。
  • 自动数据源绑定。 C#在LINQ方面具有很强的领先优势,此外,丰富的第3部分库也提供了优势
  • SQL连接。爪哇
  • 自动装箱。两种语言都提供了它,但是C#属性在设置器和获取器方面为它提供了更好的设计
  • 注释/属性。 C#属性是更强大,更清晰的实现
  • 内存管理-我完成的所有测试中的Java VM都远远优于CLR
  • 垃圾收集-Java在这里显然是另一个赢家。 C#/。NET框架的非托管代码使这成为一场噩梦,尤其是在使用GUI时。
  • 泛型-我相信这两种语言在这里基本上是并列的。我的直觉是Java更好,但是没有逻辑可以作为基础。另外,我仅使用C#泛型ALLOT和Java泛型几次...
  • 枚举。就我而言,就Java而言,C#实现令人厌烦。
  • XML-在这里扔。 .NET所具有的XML和序列化功能在本机上胜过eclipse / Java。但是,这两种产品都有很多可以帮助XML的库...我已经尝试了一些,但从未真正对它们感到满意。我一直坚持将本机C#XML与我自己创建的一些自定义库结合在一起,并且已经习惯了,因此在这一点上很难对此做一个比较。
  • IDE-在非GUI方面,Eclipse优于Visual Studio。因此Java赢得了非GUI的胜利,而Visual Studio赢得了GUI的胜利...

这些都是我暂时无法考虑的项目。我敢肯定,我们可以从字面上挑选数百个项目来比较和对比这两个项目。希望此列表是更常用功能的横截面...