C#和Java之间的主要区别是什么?
。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
我只想澄清一件事。这不是哪个更好的问题,我将这一部分留给其他人讨论。我不在乎。在工作面试中有人问我这个问题,我认为学到更多可能会有用。
这些是我能想到的:
- Java是“平台无关的”。如今,您可以说存在Mono项目,因此也可以考虑使用C#,但我认为这有点夸张。为什么?好了,当Java的新发行版完成时,它同时可在其支持的所有平台上使用,另一方面,Mono实现中仍缺少多少C#3.0功能?还是我们应该在这里比较的是CLR vs. JRE?
- Java不支持事件和委托。我所知道的。
- 在Java中,所有方法都是虚拟的
- 开发工具:我相信还没有像Visual Studio这样的工具。尤其是如果您使用过团队版本,您将了解我的意思。
请添加您认为相关的其他人。
更新:我突然想到,Java在类,方法等上没有自定义属性,是吗?
回答:
(此处未提及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都会为装箱创建一个引用类型。
这并不详尽,但涵盖了我能想到的所有内容。
以上是 C#和Java之间的主要区别是什么? 的全部内容, 来源链接: utcz.com/qa/422818.html