web-dev-qa-db-fra.com

Incrémentation du type de caractère en Java

En pratiquant Java, j’ai trouvé cela au hasard:

class test
{
    public static void main(String arg[])
    {
        char x='A';
        x=x+1;
        System.out.println(x);
    }
}

Je pensais que cela provoquerait une erreur, car nous ne pouvons pas ajouter la valeur numérique 1 à la lettre A en mathématiques, mais le programme suivant s'exécute correctement et est imprimé. 

B 

Comment est-ce possible?

18
Mahesh Nadar

En Java, char est un type numérique. Lorsque vous ajoutez 1 à une char, vous accédez au prochain point de code unicode . Dans le cas de 'A', le prochain point de code est 'B':

char x='A';
x+=1;
System.out.println(x);

Notez que vous ne pouvez pas utiliser x=x+1 car cela entraîne une conversion restrictive implicite. Vous devez utiliser x++ ou x+=1 à la place.

29
dasblinkenlight

Une char est en fait mappée sur une int, regardez la Table Ascii .

Par exemple: une majuscule A correspond au nombre décimal 65. Lorsque vous ajoutez 1 à cette char, vous incrémentez simplement le nombre décimal de 1. Le nombre devient donc 66, ce qui correspond au capital B.

5
RvanHeest

charest un type numérique (2 octets de long) et est également le seul type primitif numérique non signé en Java.

Vous pouvez aussi faire:

int foo = 'A';

Ce qui est spécial ici est que vous initialisez la char avec une constante de caractère au lieu d’un nombre. Ce qui est également spécial à ce sujet est sa représentation en chaîne, comme vous pouvez le constater. Vous pouvez utiliser Character.digit(c, 10) pour obtenir sa valeur numérique (sous la forme d'une int, car 2 ^ 16 - 1 n'est pas représentable par une short!).

3
fge

C'est le programme équivalent de votre programme:

public class Tester {
    public static void main(String args[]){
             char start='\u0041';
             char next='\u0041'+1;
             System.out.println(next);
    }
}

Mais comme vous le voyez, next=start+1, ne fonctionnera pas. C'est la façon dont Java gère. 

La raison pourrait en être que nous pourrions utiliser accidentellement start, avec un entier 1 en pensant que start est une variable int et utiliser cette expression. Depuis, Java est si strict sur la minimisation des erreurs logiques. Ils l'ont conçu de cette façon, je pense.

Cependant, lorsque vous le faites, char next='\u0041'+1; il est clair que '\u0041' est un caractère et que 1 sera converti implicitement en un octet de 2. Ce pas d'erreur pourrait être fait par un programmeur. Peut-être que c'est la raison pour laquelle ils l'ont autorisé.

char est 2 octets en Java. char supporte unicode caractères. Lorsque vous ajoutez ou soustrayez un caractère var avec un entier décalé, vous obtenez le caractère unicode équivalent dans la table unicode. Puisque B est à côté de A, vous avez B.

3
pinkpanther

Un char en Java est juste un nombre entier, donc vous pouvez l'incrémenter/le décrémenter. Chaque numéro de caractère a une valeur correspondante, une interprétation en tant que caractère, en vertu d'une table de conversion: que ce soit le codage ASCII, ou le codage UTF-8, etc.

En y réfléchissant bien, toutes les données d’un ordinateur - images, musique, programmes, etc. - ne sont que des chiffres. Un caractère simple ne fait pas exception à la règle, il utilise aussi codé ou codifié en tant que nombre.

2
Óscar López

char sont stockés sous forme de valeurs unicode à 2 octets en Java. Donc, si char x = 'A', cela signifie que A est stocké au format unicode. Et au format unicode, chaque caractère est représenté par un entier. Ainsi, lorsque vous dites x= x+1, il incrémente la valeur unicode de A, qui affiche B.

2
Rahul Bobhate

vous devez taper le résultat après avoir ajouté des parenthèses comme ceci:

x='A';
x = (char) (x+1);

sinon vous perdrez des erreurs de données.

1
Omar Aldawud

Parce que le type char fonctionne efficacement comme un entier non signé 16 bits. 

Donc, définir char x='A' équivaut presque à int x=65 lorsque vous en ajoutez un; vous obtenez 66; ou ASCII 'B'.

0
tbsalling

Chaque char a un code de caractère. L'ordinateur voit un caractère comme un nombre non signé, vous pouvez donc l'incrémenter.

0
gkovacs90