Primitive data types in Java include boolean, char, byte, short, int, long, float, and double. These types have predefined ranges of values they can hold and operations that can be performed on them. When performing operations between types of different sizes, Java automatically promotes the smaller type to the larger to avoid overflow errors. Special floating point values like Infinity and NaN are also supported.