So we are very much in the world of
https://en.wikipedia.org/wiki/Hacker%27s_Delight
where you very much live 2's complement math, so if you want do do unsigned math in Java you are expected to understand that the unsigned integers are hidden inside the signed integers and vice versa. It's high level but you have to think like an assembly programmer!
The article of course ignores the direction of more dynamic applications languages like Python and Clojure that put bigints on your fingers and often have a disciplined hierarchy along the lines of
int -> bigint -> rationals -> reals