The Java data type byte for example holds data from -128 to 127 in a single byte on storage. To enable to distingush between - 1 to -128 from 0 to 127 would require extra data which would take the datatype obver its allocated storage. Admittedly it would only take 1 extra bit but it still goes over.
How does java do this?