比较Java 7和C#3
(此处未提及Java 7的某些功能,但
using已删除了所有C#版本相对于Java 1-6 的声明优势。)
并非所有摘要都是正确的:
- 在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 / is方法的约定
- Java没有等效的“不安全”代码
- 与Java的JNI相比,C#(通常是.NET)中的Interop更容易
- Java和C#的枚举概念有些不同。Java更加面向对象。
- Java没有预处理程序指令(在C#中为#define,#if等)。
- Java有没有对应的S C#“
ref
,并out
通过引用传递参数 - Java没有等效的部分类型
- C#接口无法声明字段
- Java没有无符号整数类型
- Java不支持十进制类型的 语言 。(java.math.BigDecimal提供了 类似 System.Decimal的功能,但有所不同,但是没有语言支持)
- Java没有等效的可空值类型
- Java中的装箱使用预定义(但为“常规”)引用类型,并对它们进行特定操作。C#和.NET中的装箱是一个更透明的事情,对于任何值类型,CLR都会为装箱创建一个引用类型。
这并不详尽,但涵盖了我能想到的所有内容。



