我只想澄清一件事。这不是哪个更好的问题,这部分我留给其他人讨论。我不在乎。
我在面试时被问到这个问题,我认为了解更多可能会有用。
这些是我能想到的:
- Java 是“平台无关的”。那么现在你可以说有Mono项目,所以 C# 也可以考虑,但是
我相信这有点夸张。为什么?好吧,当 Java 的新版本完成后,它可以同时在它支持的所有平台上使用,另一方面,Mono 实现中仍然缺少 C# 3.0 的多少功能?或者真的是这样吗CLR vs. JRE我们应该在这里比较吗?
- Java 不支持事件和委托。据我所知。
- 在Java中所有方法都是虚拟的
- 开发工具:我相信还没有像Visual Studio这样的工具。特别是如果您使用过团队版本,您就会明白我的意思。
请添加您认为相关的其他内容。
更新:
我突然想到,Java 没有类、方法等自定义属性之类的东西。是吗?
比较 Java 7 和 C# 3
(这里没有提及 Java 7 的一些特性,但是using
所有版本的 C# 相对于 Java 1-6 的声明优势已被删除。)
您的总结并非全部正确:
- 在Java中方法是虚拟的默认情况下但你可以将它们定为最终的。 (在 C# 中,它们默认是密封的,但您可以将它们设为虚拟。)
- 有很多用于 Java 的 IDE,既有免费的(例如 Eclipse、Netbeans),也有商业的(例如 IntelliJ IDEA)
除此之外(以及您的摘要中已经包含的内容):
- 两者之间的泛型完全不同; Java 泛型只是一种编译时“技巧”(但确实是一个有用的技巧)。在 C# 和 .NET 中,泛型也在执行时维护,并且适用于值类型和引用类型,保持适当的效率(例如
List<byte>
as a byte[]
支持它,而不是装箱字节数组。)
- C# 没有检查异常
- Java 不允许创建用户定义的值类型
- Java没有运算符和转换重载
- Java 没有迭代器块来简单实现迭代器
- Java 没有像 LINQ 这样的东西
- 部分由于没有委托,Java 没有类似匿名方法和 lambda 表达式的东西。匿名内部类通常扮演这些角色,但很笨拙。
- Java没有表达式树
- C#没有匿名内部类
- 事实上,C# 根本没有 Java 的内部类 - C# 中的所有嵌套类都像 Java 的静态嵌套类
- Java 没有静态类(静态类没有any实例构造函数,不能用于变量、参数等)
- Java 没有任何与 C# 3.0 匿名类型等效的东西
- Java 没有隐式类型局部变量
- Java没有扩展方法
- Java 没有对象和集合初始值设定项表达式
- 访问修饰符有些不同 - 在 Java 中(目前)没有程序集的直接等效项,因此不知道“内部”可见性;在 C# 中,没有相当于 Java 中考虑命名空间(和继承)的“默认”可见性
- Java 和 C# 中的初始化顺序略有不同(C# 在链式调用基类型的构造函数之前执行变量初始值设定项)
- Java 没有作为语言一部分的属性;它们是 get/set/is 方法的约定
- Java 没有相当于“不安全”的代码
- C#(以及一般的 .NET)中的互操作比 Java 的 JNI 更容易
- Java 和 C# 对枚举的理解有些不同。 Java 更加面向对象。
- Java 没有预处理器指令(C# 中的 #define、#if 等)。
- Java 没有与 C# 相当的语言
ref
and out
用于通过引用传递参数
- Java 没有等价的部分类型
- C# 接口无法声明字段
- Java没有无符号整数类型
- Java没有language支持十进制类型。 (java.math.BigDecimal 提供了一些东西likeSystem.Decimal - 有差异 - 但没有语言支持)
- Java 没有可空值类型的等效项
- Java 中的装箱使用预定义的(但“正常”)引用类型及其特定操作。 C# 和 .NET 中的装箱是一件更加透明的事情,CLR 会为任何值类型的装箱创建引用类型。
这并不详尽,但它涵盖了我能想到的所有内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)