Difference between Java's primitive data type and reference data type