A conversion needs to happen when assigning a numeric value of one type to a variable of a different type.
Data values can be implicitly (automatically) converted whenever the conversion would not result in a loss of data. This is possible if the target type has a wider range of types or greater precision than the source type.
Implicit conversion:
1
2
3
4
| int i = 12;long l = i; // Implicit (int to long)float f = i; // Implicit (int to float)double d = 4.2f; // Implicit (float to double) |
An explicit conversion is required when the conversion cannot be done without losing data. These conversions require a cast operator that specifies the target type.
Explicit conversion:
1
2
3
4
5
6
7
| long l = 12;int i = l; // Compiler error--can't implicitly convertint i = (int)l; // Explicit (long to int)float f = 4.2f;i = (int)f; // Explicit (float to int)double d = 4.2f;f = (float)d; // Explicit (double to float) |

