C# появился не просто так, микрософту нужно было немного изменить Java чтобы она лучше интегрировалась в Windows, но Sun на это не согласилась. Тогда микрософт взял все лучшее из Java, рудименты выкинули, добавили новых фич, все это причесали, подстроили под Windows и получился дотнет. Java правда тоже все это время на месте не стояла и дотнет догнала.
В основе и то и другое байткод, и то и другое с претензиями на кроссплатформенность. Однако с кроссплатформенностью и в том и в другом есть ньюансы. В итоге C# и Java - близнецы братья. За счет того что C# появился позже, он с рождения был посовременнее и покрасивше (хотя на вкус и цвет товарищей нет

).
Можно было бы конечно рассмотреть и то что в дотнете есть не только C#, но и другие языки, например J# - это таже Java но в дотнете. Но реально дотнет это конечно C#. Managed C++ - это уже уродство, после знакомства с ним, C++ становится жалко... Умеют в микрософте поиздеваться над языком...
Итого...
Плюс С# - его любит Win, поэтому это мейнстрим для Win приложений. Минус C# - относительно молодой язык, еще не успел обрасти таким количеством наработок как в Java, но темпы развития впечатляют.
Плюс Java - т.к. платформа старая, на ней реализовано много проектов, либ. Минус Java - для Windows писать можно, но это будет не то...
Я в свое время выбрал дотнет, поэтому мои симпатии на его стороне

В целом ситуацию вижу так - для Windows дотнет, для линуксов Java

C# на мой взгляд более выразителен и красив, зато у Java больше опенсорса.
