我只想澄清一件事。 这不是一个更好的问题,我留给其他人讨论。 我不关心它。 我在工作面试中被问及这个问题,我认为了解更多一点可能会有帮助。
这些是我可以想到的:
Java是“独立于平台”的。 那么现在你可以说有Mono项目,所以C#可以被认为是太过了,但我认为它有点夸张。 为什么? 那么,当一个新的Java版本完成时,它可以在它支持的所有平台上同时使用,另一方面,Mono实现中仍然缺少C#3.0的多少特性? 或者是我们应该在这里比较一下CLR还是JRE呢? Java不支持事件和委托。 我所知道的。 在Java中,所有方法都是虚拟的 开发工具:我相信目前还没有像Visual Studio这样的工具。 特别是如果你使用团队版本,你就会明白我的意思。 请添加您认为相关的其他人。
更新:刚刚弹出我的想法,Java没有像类,方法等自定义属性的东西或者呢?
比较Java 7和C#3
(这里没有提到Java 7的一些特性,但是已经删除了所有版本的C#over Java 1-6中的using
语句优势。)
并非所有的摘要都是正确的:
在Java中,方法默认是虚拟的,但你可以使它们最终。 (在C#中,它们默认是封闭的,但可以使它们变为虚拟。) 有很多用于Java的IDE,既有免费的(例如Eclipse,Netbeans),也有商业的(如IntelliJ IDEA) 除此之外(以及您的摘要中已有内容):
泛型在两者之间完全不同; Java泛型只是编译时的“窍门”(但在这方面很有用)。 在C#和.NET中,泛型在执行时也被维护,并且为值类型和引用类型工作,保持适当的效率(例如, List<byte>
作为byte[]
支持它,而不是一个盒装字节数组。) C#没有检查异常 Java不允许创建用户定义的值类型 Java没有运算符和转换重载 Java没有用于简单实现迭代器的迭代器块 Java没有像LINQ那样的东西 部分原因是没有委托,Java没有任何非常像匿名方法和lambda表达式的东西。 匿名内部类通常填充这些角色,但是很笨拙。 Java没有表达式树 C#没有匿名内部类 C#根本没有Java的内部类,事实上 - C#中的所有嵌套类都像Java的静态嵌套类 Java没有静态类(它没有任何实例构造函数,也不能用于变量,参数等) Java没有与C#3.0匿名类型等效的任何东西 Java没有隐式类型化的局部变量 Java没有扩展方法 Java没有对象和集合初始值表达式 访问修饰符有些不同 - 在Java中(目前)没有组件的直接等价物,因此不知道“内部”可见性; 在C#中,没有等价于Java中的“默认”可见性,它考虑了命名空间(和继承) Java和C#中初始化的顺序略有不同(C#在链接调用基类型构造函数之前执行变量初始化) Java没有属性作为语言的一部分; 他们是get / set /方法的约定 Java没有相当于“不安全”的代码 Interop在C#(和.NET中)中比Java的JNI更容易 Java和C#有一些不同的枚举想法。 Java的更加面向对象。 Java没有预处理器指令(#define,#if等在C#中)。 Java没有C#的ref
和out
参数传递参数的等价物 Java没有部分类型的等价物 C#接口不能声明字段 Java没有无符号整数类型 Java对小数类型没有语言支持。 (java.math.BigDecimal提供了类似System.Decimal的东西 - 有区别 - 但没有语言支持) Java没有等价的可空值类型 Java中的拳击使用预定义(但“普通”)引用类型,并对它们进行特定操作。 C#和.NET中的拳击是一个更透明的事情,CLR为任何值类型创建了一个引用类型。 这并非详尽无遗,但它涵盖了我能想到的所有事情。
以下是Dare Obasanjo对C#和Java之间差异的深入参考。 在两者之间切换时,我总是发现自己指的是这篇文章。
http://www.25hoursaday.com/CsharpVsJava.html
C#具有非常方便的自动属性,它们也有助于保持代码更清洁,至少在您的getter和setter中没有自定义逻辑时。
链接地址:
http://www.djcxy.com/p/84517.html
上一篇:
What are major differences between C# and Java?
下一篇:
Switch Statement and Strings