Difference between [SerializeField] and public member

I can’t able to understand difference between public variable or Serialize variable.

[SerializeField] Text connectionText;

or

 public Text connectionText;

Though actual result of both line is same. You are seeing variable on Unity Inspector.
What is actual difference?

The difference is that in the first example, connectionText is still a private variable, that is not able to be accessed from other scripts.

This allows you to follow best practices for object design (not exposing internal object state to other objects so they can’t muck with it), while at the same time allowing a designer to initialize that internal state at design time.