在Java和C#之间切换时,你会改变你的思维方式吗



对于那些有幸同时使用Java和C#的人来说,这是一个问题。

你是否发现,当你从一个环境转移到另一个环境时,你必须进行某种心理环境切换?

我目前正在这两个领域工作,因为语法和库非常相似,但又有细微的不同,当我从一个转到另一个时,我发现这很令人沮丧。

这比我在任何其他编程语言之间切换的经历都要多。

有人有什么技巧可以让你的大脑在如此相似的语言中以不同的方式工作吗?

是的,我必须进行心理上下文切换,因为LINQ在Java中不可用:(

除此之外,还有一些小事情,比如foreach (X x in y)for (X x : y),经常让我感到困惑,但在其他情况下,这并不是一个巨大的。

至于让你的大脑以不同的方式工作的技巧:不要屈服于使用其他语言的命名惯例的诱惑。例如,我发现在Java中使用骆驼大小写的方法名对我的大脑来说是一个很好的推动。

编辑:仿制药方面的差异很重要,偶尔也会引起大脑扭曲。

我发现最困难的切换是围绕泛型(C#做得更好)、委托(Java对匿名内部类的攻击)和事件(Java没有)

我发现,确保你使用的是该语言的习语(即使用委托而不是用C#创建接口)将有助于让你的思维进入正轨。

其他人提到的语言差异是最明显和最有问题的。我也发现图书馆的差异有时令人抓狂,真的浪费了很多时间。

"细节"也能真正帮助你,比如了解内存模型是如何工作的,或者运行时执行优化的方式。深入了解运行时环境的内存模型、垃圾收集技术、线程模型等,可以在您思考和开发软件的方式上产生重大变化。

我无法在那个级别上智能地比较Java和C#的细节,但我可以说,我在Java中会做的很多事情,我不舒服或不确定我是否能在C#中做,因为我不了解它的底层细节。这影响了我为从GUI工作人员交互到处理内存管理的所有内容编写的代码。

我发现,处理Java和C#差异的最好方法是简单地将它们视为完全不同的语言——避免"C#和Java基本上是同一种语言,具有不同的类名"的陷阱。

Java和C#之间字符串相等性比较的工作方式不同,这是需要记住的一点,尤其是当从使用C#转到使用Java时。

在C#中,您可以使用==运算符对两个string实例进行值比较:

// C# string value comparison example
string string1 = GetStringValue1();
string string2 = GetStringValue2();
// Check to see whether the string values are equal
if (string1 == string2) 
{
    // Do something...
}

在Java中,==运算符对字符串进行引用(而不是值)比较,因此需要使用equals()方法:

// Java string value comparison example
String string1 = getStringValue1();
String string2 = getStringValue2();
// Check to see whether the string values are equal
if (string1.equals(string2)) 
{
    // Do something...
}

一句话:在Java中比较字符串时,不要忘记运算符==不会像在C#中比较字符串那样进行值相等比较。(同样的概念也适用于操作员!=。)

它们非常相似,差异让我大吃一惊。我在大学学习Java,当我找到第一份编程工作时就开始使用C#。

.Net 1.1中的C#似乎更相似,但现在在C#3.0中,我使用委托、泛型,尤其是像Dictionaries这样的API构造,这比我在Java中使用的要多得多。在学习F#的过程中,我越来越多地使用了C#的功能方面(现在用它或OCaml写作真的迫使我改变思维方式)。

最新更新