就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。
8年前关闭。
几年来,我一直在使用 C# 和更一般的 .Net 框架。我经常听说 C# 和 Java 语言之间的相似性,并且想了解更多关于第二个语言的信息。
最佳答案
好吧,虽然 C# 和 Java 从表面上看很相似,但仍有许多细微的差异可能会让您大吃一惊。一般来说,我认为相反的方向——从 Java 到 C#——问题较少。这主要是因为 C# 是一种更复杂的语言,因此您可能会从常见的 Java 模式中找到许多简化,但反过来可能会有点痛苦。
需要注意的事项(部分列表,不保证详尽无遗):
另外接口(interface)一般不以
I
开头.另一方面,您必须使用不同的关键字来实现它们。但是,在代码中间并没有真正帮助。 虽然显而易见,但这是我在学习语言时花费最多的时间。在处理已知范式时,语法差异会很快得到解决,但在某些情况下,了解标准库/类库/框架需要一些时间:-)
catch (SomeException ex) {
ex.printStackTrace();
}
经常在你的代码1 :-)
int
, float
, char
, &C。和类,例如 String
.因为他们实现了自动装箱,所以没什么关系,但有时包装 int
仍然很烦人。在 Integer
. virtual
默认情况下,而 c# 方法不是。 foreach (a in b)
→ for (a : b)
internal
之类的东西和 protected internal
不存在。但是不合格的成员对同一个包中的其他类是可见的(有点 internal
,但又不完全是)。 ==
完成的在 java 。您必须使用 .equals()
.在 C# 中 ==
在字符串上是值相等,在 Java 中 ==
总是引用相等。 Foo getFoo()
完成。/void setFoo(Foo foo)
使用属性时,C# 在背后默默生成的模式,但您必须在 Java 中显式执行。通常,为了使语言本身更简单,Java 中的许多事情只是约定。尽管如此,大多数时候你最好坚持他们:-) myList.get(5)
访问列表项而不是类似数组的语法 myList[5]
.不过,这只是一个轻微的不便。 Object
s 仍然存在。当编译器提示所有四个 ?
时,泛型中的通配符有时也很难解决。在具有不同类型的泛型中。 (公平地说:在这种情况下,无论如何我都会在运行时需要类型信息,所以我又回到了 Object
s)。 一般建议:找一个有 Java 经验的 friend ,让他看看你的代码。当你直接问他这个问题时,他可能无法告诉你你应该注意的一切,但他可以很好地发现代码中的奇怪东西并通知你。这对我学习Java有很大的帮助(虽然我是先学Java然后C#,所以可能会有所不同)。
1 是的,我知道许多 catch 块看起来不同,但是,这可能是典型的块和 not even that rare .
2 Quaere , JaQue , JaQu , Querydsl
3 有 lambdaj , 尽管。感谢您指出这一点,Esko .
关于c# - 从 C# 到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109807/