Simple math doing my head in - when is an int treated like an int?

Is this behaviour (intermediate calcs being influenced by data type of variable) just Arduino, or is it C? Damn sure this has never happened to me in years of Java..?