比较Java 7和C#3
(Java 7的一些功能在这里没有提及,但是使用语句的所有C#版本的优点超过Java 1-6已被删除。)
并非您的所有摘要都是正确的:
>在Java方法默认是虚拟的,但你可以使它们最终。 (在C#中,它们默认是封闭的,但你可以让它们是虚拟的。)
>有很多IDE的IDE,免费(如Eclipse,Netbeans)和商业(如IntelliJ IDEA)
除此之外(和你的摘要中已经有):
>泛型在两者之间是完全不同的; Java泛型只是一个编译时的“诡计”(但在那个时候是有用的)。在C#和.NET泛型中,在执行时也被维护,并且用于值类型以及引用类型,保持适当的效率(例如,List 作为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 / is方法的约定
> Java没有相当于“不安全”的代码
> Interop在C#(和一般的.NET)比Java的JNI更容易
> Java和C#有一些不同的枚举概念。 Java更加面向对象。
> Java没有预处理指令(C#中的#define,#if等)。
> Java没有等价的C#的参考和输出通过引用传递参数
> Java没有等价的部分类型
> C#接口不能声明字段
> Java没有无符号整数类型
> Java对于十进制类型没有语言支持。 (java.math.BigDecimal提供像System.Decimal – 有差异,但没有语言支持)
> Java没有等价的可空值类型
> Java中的拳击使用预定义(但“正常”)引用类型,并对其进行特定操作。在C#和.NET中的装箱是更透明的事情,为CLR为任何值类型的装箱创建引用类型。
这不是详尽无遗,但它涵盖了我可以想到的一切。