Think of it as the following:
The variable is an empty paper. You may or may not write an address on it that leads you to some location.
The first line writes on the paper an address to the object (created after the new keyword).
On the second line, you just have an empty paper that is expected (by the compiler) to hold a dictionary reference at some point, but currently it is just an empty paper. So if you try to use it to go to the dictionary address, you can't (aka NullReferenceException). There is no information about where the object is (there is no address actually).
In Code:
Dictionary<int, List<string>> myDictionary = new Dictionary<int, List<string>>();
myDictionary.Add(1, "1"); // OK, myDictionary points to an address of
// Dictionary object and I can access it.
While:
Dictionary<int, List<string>> myDictionary = null;
myDictionary.Add(1, "1"); // Fails at run-time, I have no address for a Dictionary object
// here AKA : NullReferenceException
Wrong statements you said:
You're not declaring a class null as you said, you're creating a variable pointing to null.
The second line is not an empty dictionary object as you said. It is a variable of type Dictionary that points to NULL. There is no empty dictionary object in memory.