我只想澄清一件事。这不是一个更好的问题,我要留给其他人讨论。我不在乎。 在我的求职面试中,我被问到这个问题,我认为学习更多内容可能会有所帮助。
这些是我能想到的:
请添加您认为相关的其他人。
更新: 刚刚出现在我的脑海中,Java没有类似于类,方法等的自定义属性。或者是吗?
答案 0 :(得分:329)
比较Java 7和C#3
(此处未提及Java 7的某些功能,但已删除所有C#over Java 1-6版本的using
语句优势。)
并非所有摘要都是正确的:
除此之外(以及你的摘要中已有的内容):
List<byte>
作为byte[]
支持它,而不是数组盒装字节。)ref
和out
用于通过引用传递参数这并非详尽无遗,但它涵盖了我能想到的一切。
答案 1 :(得分:24)
以下是Dare Obasanjo对C#和Java之间差异的深入参考。在两者之间切换时,我总是发现自己指的是这篇文章。
答案 2 :(得分:11)
C#具有非常方便的自动属性,它们还有助于保持代码清洁,至少在getter和setter中没有自定义逻辑时。
答案 3 :(得分:10)
Java中缺少C#的特性 •C#包含更多原始类型和捕获算术异常的功能。
•包含大量基于Java的符号方便,其中许多(例如运算符重载和用户定义的强制转换)已经为大型C ++程序员社区所熟悉。
•事件处理是“一等公民” - 这是语言本身的一部分。
•允许定义“结构”,它类似于类,但可以在堆栈上分配(与C#和Java中的类实例不同)。
•C#将属性作为语言语法的一部分实现。
•C#允许switch语句对字符串进行操作。
•C#允许匿名方法提供闭包功能。
•C#允许通过函数式yield关键字使用协同例程的迭代器。
•C#支持输出参数,有助于返回多个值,C ++和SQL共享的功能。
•C#具有别名空间的功能。
•C#具有“显式成员实现”,它允许类专门实现接口的方法,与其自己的类方法分开。这允许它还实现两个碰巧具有相同名称的方法的不同接口。接口的方法不需要公开;它们只能通过该界面访问。
•C#提供与COM的集成。
•遵循C和C ++的示例,C#允许通过引用调用原始类型和引用类型。
C#
中缺少Java的功能•Java的strictfp关键字保证浮点运算的结果在不同平台上保持不变。
•Java支持已检查的异常,以便更好地实施错误捕获和处理。
答案 4 :(得分:9)
另一个好资源是http://www.javacamp.org/javavscsharp/ 该网站列举了许多说明这两种编程语言之间几乎所有差异的例子。
关于属性,Java有注释,它的工作方式几乎相同。
答案 5 :(得分:5)
泛型:
使用Java泛型,实际上并没有获得.NET带来的任何执行效率,因为当您在Java中编译泛型类时,编译器会删除type参数并在任何地方替换Object。例如,如果您有Foo<T>
类,则java编译器会生成字节代码,就好像它是Foo<Object>
一样。这意味着铸造以及装箱/拆箱必须在“背景”中完成。
我一直在玩Java / C#一段时间了,在我看来,语言层面的主要区别在于,如你所指出的那样,代表们。
答案 6 :(得分:0)
请仔细阅读以下链接 msdn.microsoft.com/en-us/library/ms836794.aspx 它涵盖了C#和java
之间的相似性和差异