Narrowing is the opposite of widening. You're squeezing a larger type into a smaller one. Java won't do this automatically because data might be lost.
double price = 9.99;
int rounded = (int) price;
The (int) is a cast operator. It tells Java: "I know this might lose data, do it anyway." The result is 9, not 10. Java doesn't round. It chops off the decimal part entirely.
Without the explicit cast, this code won't compile. Java forces you to acknowledge the risk. This prevents accidental data loss. Imagine storing a bank balance of 1049.75 into an int and silently losing . The compiler makes sure that's a conscious decision, not an oversight.