You are asking several questions at once. Let me address them separately:
How similar Java and C#?
Both C# and Java drew from the C/C++ (and Objective C, and others) to define their syntax. And bot of them are compiled to an intermediate language.
The similarities end there.
On the syntax level, Java was influenced by Smalltalk, while C# tried to stay closer to C/C++ (eg: compare Java's inherits
and implements
with C#'s :
notation) and took a vague inspiration from VB on those concepts that weren't mappable to C/C++ (example: property syntax).
On the features level, C# 1 was definitely close to Java. Among the few differences they had, I'd highlight C#'s support for "unsafe" code (including pointers) and for delegates; and Java's controversial throws
. This makes sense, since one of the goals of C# was to become an alternative to Java.
Many language features differ heavily on implementation details. For example, enums are very C'ish on C#, but are full objects in Java; or generics are implemented on the IL-level in C#, but in Java are dealt with via type erasure (neither is really close to C++'s templates besides syntax).
On the API level, they are worlds apart. C# relies on the .Net Framework, which was built on Microsoft's experience with the Visual Studio family of products (and thus is significantly Windows-oriented), while Java's Class Library was built, IIRC, from scratch, and heavily evolved over time (on these Swing days, does anyone remember AWT? I do).
Finally, it's worth mentioning that each of the languages has its own idioms, and its own community of supporters behind it.
If I learn Java, is learning C# almost
free? Or vice versa?
Neither. The key similarity is the basic syntax (semicolons, curly braces, array indexing, case-sensitiveness, etc), and you already have that from C/C++.
(DISCLAIMER: this fragment is entirely biased and subjective) On my case, I learned Java back in summer 2000; and grew as hateful towards it that I wouldn't touch it except when I was required to turn it college projects as .class files. I tried C# on 2006, and have been quite happy with it: it's far from perfect, but it quite suits my needs and style. I must admit, however, that Java was quite young on those early days, and it has improved significantly: if I were learning it from zero nowadays, I wouldn't hate it so much (but I don't think I'd prefer it over C#).
If I have to choose only one of the two languages, which would be better?
Short answer: flip a coin.
Long answer: it depends on your coding style and on what aspects of the language you value most. My best advise is to start by trying to learn both, until you feel that one of the languages pulls you more strongly than the other.
Alternatively, you can take a look at http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp.
Which has wider coverage in terms of programming language?
If you mean language built-in features, I'd say C# wins for a narrow margin. Most of the features that C# has and Java lacks are syntax sugar (although they together make a significant difference on the learning curve and on the way the language is used). I value really high C#'s operator overload and extension methods. Also, LINQ is quite funny, especially when nested, but I'm more fond of classic looping.
Hope this helps.