It would be interesting to see this: What good is a builder?.
When you initialize a field in the class you’re saying that you want the compiler to write a constructor for you where it initializes every time you instantiate that class and you don’t care what order it will do it and you don’t want it to do anything else.
If this guarantee is not enough and you want more, you want to have control of how to initialize the fields, then you can write the constructor on your own.
But there’s a catch in the first code. One of the constructors does exactly what the compiler would do in this exact situation. But an empty constructor (no parameters) has also been created that does not initialize the same field, so its value will be null on startup if you call this constructor. It may have been intentional or accidental, but the first code has this capability, the second does not, the field will be initialized in all instances if the empty constructor is called, since the initializations that the compiler places will not exist in this method.