我一直在使用C / C ++和Python,但现在我看到很多新的编程书都使用Java或C#作为例子。
我认为我暂时不会使用Java或C#,但我想我必须学习其中一种语言(或两种语言)才能阅读/理解这些书籍。
答案 0 :(得分:42)
你一次问几个问题。让我分开处理:
Java和C#有多相似?
C#和Java都来自C / C ++(和Objective C等)来定义它们的语法。并且它们都被编译成中间语言。
这个共同的起源使得语言看起来在许多层面上相似,以至于任何一种语言的代码都可能被初学者混淆;并且还使运行时环境有些可比。然而,两种设计原则以及每种语言的演变方式存在很大差异,这使得每种语言的处理方式各不相同;这里是最突出的:
在语法层面上,Java受Smalltalk的影响,而C#试图更接近C / C ++(例如:将Java的extends
和implements
与C#的:
表示法进行比较)从VB中获取了一些含糊不清的灵感来解释那些不能映射到C / C ++的概念(例如:属性语法)。
在功能级别上,C#1绝对接近Java。在他们遇到的少数差异中,我强调了C#对“不安全”代码(包括指针)和代表的支持;和Java的争议throws
。这是有道理的,因为C#的目标之一是成为Java的替代品。
许多语言功能在实现细节方面存在很大差异。例如,枚举在C#上非常C'ish,但在Java中是完整的对象;或者泛型是在C#中的IL级实现的,但在Java中是通过类型擦除来处理的(除了语法之外,它们都不接近C ++的模板)。
在API级别上,它们是世界分开的。 C#依赖于.Net Framework,它基于Microsoft在Visual Studio系列产品上的经验(因此非常注重Windows),而Java的类库是从头开始构建的,IIRC,并且随着时间的推移而大量发展(在这些Swing时代,有没有人记得AWT?我这样做。
最后,值得一提的是,每种语言都有自己的习语,以及它背后的支持者社区。 p>
如果我学习Java,几乎就是在学习C# 自由?反之亦然?
都不是。关键的相似之处是基本语法(分号,花括号,数组索引,区分大小写等),你已经有了C / C ++中的语法。
(免责声明:这个片段完全偏向主观)在我的案例中,我在2000年夏天学习了Java;并且变得像对它的仇恨一样,我不会碰它,除非我被要求将大学项目作为.class文件。我在2006年尝试了C#,并且对它非常满意:它远非完美,但它非常适合我的需求和风格。但是,我必须承认,Java早期很年轻,并且已经有了很大的改进:如果我现在从零学习它,我不会那么讨厌(但我不认为我更喜欢它超过C#)。
如果我只选择两种语言中的一种,那会更好吗?
简短回答:翻转一枚硬币。 答案很长:这取决于您的编码风格以及您最重视的语言的哪些方面。我最好的建议是从尝试学习两者开始,直到你觉得其中一种语言比另一种语言更强烈。
或者,您可以查看http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp。
哪种编程语言覆盖面更广?
如果您的意思是语言内置功能,我会说C#获胜的范围很小。 C#和Java缺少的大部分功能都是语法糖(尽管它们共同对学习曲线和语言使用方式产生了重大影响)。我非常重视C#的运算符重载和扩展方法。另外,LINQ非常有趣,特别是在嵌套时,但我更喜欢经典的循环。
希望这有帮助。
答案 1 :(得分:3)
我刚刚在英国完成了计算机科学学位,我选择了一所大学,教授C#而不是Java .........理由是,所以我可以很容易地直接进入高薪工作一个软件开发人员,公司只是想要了解“新”技术的人。
这些公司包括投资银行,科技创业公司,IT咨询公司。
考虑最终目标......如果是现金和现代知识......请遵循C#。
....如果是其他任何内容,请按照C#
P.S。 Java很糟糕 - 我不得不说。
答案 2 :(得分:3)
答案 3 :(得分:2)
库非常不同,文档的方法也大不相同。我发现C#方法更容易。
为了说明我的意思,在任何一种语言中,您想要处理的某个对象可以通过从“对象”继承到“通用对象”到“特定对象”来实现。在Java中,如果要查找“通用对象”的属性,则必须转到doc,而在C#文档中,列出了“特定对象”的所有属性。
至少那是几年前我做一些Java时的回归。
答案 4 :(得分:1)
自C#1.0以来不是1:1映射。 C#增加了许多在Java中没有模拟的东西(LINQ,闭包等)。