String.Empty is a static readonly field of the System.String class.
When the String class is first accessed, its static constructor sets its Empty field equal to the string literal "".
So, Sivaraman is correct that they both represent an empty string i.e. a string which contains no characters, not even '\0', and so has a Length of zero.
However, they are treated differently by the compiler in that "" is a constant but String.Empty is not. You can see this by trying to compile the following program:
static void Main()
const string s1 = "";
const string s2 = String.Empty;
The error message is :
error CS0133: The expression being assigned to 's2' must be constant
Notice also that strings are always followed in memory by a null character ('\0') even though this null character is not part of the string itself. This enables you to iterate through the characters of a string using a pointer in 'unsafe' code, though there can be problems if the string itself contains embedded nulls.