La réponse est en complément à deux.
En bref, Java (et de la plupart des langues modernes) ne représentent pas des nombres entiers signés à l'aide de signé-l'ampleur de la représentation. En d'autres termes, un entier 8 bits n'est pas un bit de signe, suivi par un 7 bits entier non signé.
Au lieu de cela, les entiers négatifs sont représentés dans un système qui s'appelle le complément à deux, qui permet de faciliter l'arithmétique de traitement dans le matériel, et élimine également le potentiel de l'ambiguïté d'avoir zéro positif et négatif de zéro. Un effet secondaire de l'élimination de zéro négatif est qu'il y a toujours un nombre négatif est disponible au bas de la gamme.
Une autre propriété intéressante de complément à deux systèmes est que le premier bit n'est effectivement fonctionner comme un signe indicateur (c'est à dire tous les numéros commençant par le bit 1 est négatif), mais les sept bits ne doivent pas être interprétées sur leur propre comme un nombre non signé à laquelle le bit de signe est appliquée.
En complément à deux n'est pas très compliqué, mais faire une première bonne adhérence sur ce complément à deux est, et comment et pourquoi il fonctionne, c'est probablement au-delà de la portée d'une SORTE de réponse. Commencer avec l'article de Wikipedia ou google le terme pour plus de ressources.
Pour tenter d'aborder brièvement votre requête sur -128, l'idée de base de la génération d'un complément à deux le nombre est de prendre le unsigned forme de le nombre, inverser tous les bits et les ajouter. Donc, non signé 128 est 10000000. Inversé, c'est 01111111, et en ajoutant l'on obtient 10000000 de nouveau. Donc, en complément à deux système, 10000000 est sans ambiguïté entre -128 et pas +128. Les nombres plus grand que ou égal à +128 simplement ne peut pas être représentée en 8 bits à l'aide d'un complément à deux du système parce qu'ils seraient ambigus avec les formes de nombres négatifs.