Why does my null reference become instantiated?

I create an array of Player with length of 2. I instantiate 1 of the 2 Player references and I set the other one to null. I run the game, and, as expected, I get alternating Logs of “100” and “NULL”. If I go to Visual Studio and edit the script (i.e. add and then remove a blank line), then when I go back to Unity, I only get Logs of “100” for both Player objects. Why does players[0] become instantiated?

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

   Player[] players;

   void Start()
   {
      players = new Player[2];
      players[0] = null;
      players[1] = new Player();
   }

   void Update()
   {
      for (int i = 0; i < 2; i++)
      {
         if (players *== null)*

{
Debug.Log(“NULL”);
}
else
{
Debug.Log(players*.health);*
}
}
}
}

[System.Serializable]
public class Player
{
public int health = 100;
}

After spending several hours across multiple days, I found some good information about this. Apparently, the issue is with the Unity serialization, in that Unity just doesn’t serialize null references for all classes.

If I make Player inherit from ScriptableObject, then Unity will serialize both objects and null references for that class.

This thread was quite helpful: http://forum.unity3d.com/threads/140666-Serialization-of-list-of-classes