我只想澄清一件事.这不是哪一个更好的问题,那部分我留给别人来讨论.我不在乎这件事. 我在求职面试中被问到这个问题,我想多学一点可能会很有用.

这些是我能想到的:

  • Java是"平台无关的".现在你可以说有Mono项目,所以也可以考虑C#,但是 我认为这有点夸张.为什么?那么,当Java的新版本发布后,它同时可以在它支持的所有平台上使用,另一方面,在Mono实现中还缺少多少C#3.0的特性呢?或者,我们应该在这里比较的真的是CLRJRE吗?
  • Java不支持事件和委托.据我所知.
  • 在Java中,所有方法都是虚拟的
  • 开发工具:我相信还没有像VisualStudio这样的工具.尤其是如果你与团队版合作过,你就会明白我的意思.

请添加您认为相关的其他内容.

更新: 我突然想到,Java在类、方法等方面没有自定义属性,是吗?

推荐答案

Comparing Java 7 and C# 3

(这里没有提到Java7的一些特性,但是所有版本的C#相对于Java1-6的using语句优势已经消除.)

您的摘要并非全部正确:

  • 在Java中,方法是虚拟的by default,但你可以把它们变成最终的.(在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没有静电类(没有any个实例构造函数,不能用于变量、参数等)
  • Java没有任何与C#3.0匿名类型等效的类型
  • Java没有隐式类型的局部变量
  • Java没有扩展方法
  • Java没有对象和集合初始值设定项表达式
  • 访问修饰符有些不同--在Java中(目前)没有程序集的直接类似功能,因此没有"内部"可见性的概念;在C#中,没有类似功能于Java中的"默认"可见性,它考虑了命名空间(和继承)
  • Java和C#中的初始化顺序略有不同(C#在对基类型的构造函数进行链式调用之前执行变量初始值设定项)
  • Java没有属性作为语言的一部分;它们是get/set/is方法的约定
  • Java没有"不安全"代码的类似功能
  • 与Java的JNI相比,C#(和.NET)中的互操作更容易
  • Java和C#对枚举有一些不同的想法.Java更加面向对象.
  • Java没有预处理器指令(#define,#if etc in C#).
  • Java没有C#的refout等效项来通过引用传递参数
  • Java没有部分类型的类似功能
  • C#接口不能声明字段
  • Java没有无符号整数类型
  • Java不支持十进制类型.(java.math.BigDecimal提供了一些like System.Decimal的东西——虽然有差异——但没有语言支持)
  • Java没有可空值类型的类似功能
  • Java中的装箱使用预定义(但"正常")引用类型,并对其执行特定操作.C#和.NET中的装箱是一件更透明的事情,CLR为任何值类型的装箱创建了一个引用类型.

这并不是详尽无遗的,但它涵盖了我能马上想到的一切.

Java相关问答推荐

我试图通过反射设置枚举字段

如何使用反射在Java中获取注释的属性?

模块化程序中 LocalDateTime 与 DateTimeFormatter 的翻译(JDK17)

由于非私有方法未覆盖或实现超类型中的方法,因此无法使用“<>”

使用 UNICODE_CHARACTER_CLASS 标志时的不同 Java 正则表达式匹配行为

如何管理 Wordle Game (JavaFx) 中的重复字母?

任务':app:compileDebugJavaWithJavac'失败

在 Spring Boot 应用程序的服务层中正确使用 Optionals

判断映射值是否包含特定字符串和受限列表中的元素

我如何使用 Dockerfile 将 Maven 依赖项存储在 Docker 映像中

JVM字节码中的“dup2_x2”指令有什么用?

如何计算 Arraylist 中的每个唯一项?

java JFileChooser如何临时禁用文件选择窗口

0 到 1000 的随机数 Math.random()

如何制作未经开发者许可不得转售的应用程序

EntityManager.remove 和 EntityManager.persist 上的 JPA 重复条目错误

在运行时更改 Spring bean 实现

Ehcache 2 Maven依赖

java中如何避免多个if

无法解析方法“assertThat(int)”