1) Type conversion allows assigning a value of one type to a variable of a different type automatically if the destination type has enough space, such as assigning an int value to a byte variable.
2) Type casting involves explicitly converting the value of one type to another using syntax like (type) before assigning it to a variable, and is necessary when the automatic conversion is not possible or may lose data.
3) Both type conversion and casting in Java allow mixing data types, but type casting preserves the original value while conversion may lose data like the fractional part of a float assigned to an int.