2010-11-19 31 views
1

Système: Windows Vista 32 bits, Java 6.0.2Conversion Chars à Ints en Java

J'ai quelques questions au sujet de la conversion de caractères à ints. J'exécuter le code ci-dessous, en laissant myInt une valeur de 4:

char myChar = '4'; 
    int myInt = myChar - '0'; 

Maintenant, est-ce quelque chose de conversion que Java automatiquement? La valeur ascii de '0' a-t-elle été soustraite de 'ascii' 4, puis a été envoyée à un int dans les coulisses? Cela est source de confusion pour moi parce que lorsque je tente de l'opération inverse, je dois effectivement jeter le résultat comme char:

int anotherInt = 5; 
    char newChar = anotherInt + '0'; //gives error 

    char newChar = (char)(anotherInt + '0'); //works fine 

Est-ce survenant parce que Java est coulée automatiquement (anotherInt + « 0 ») à un int , comme dans le premier exemple? Je vous remercie.

+0

Essayez-le avec 'int's et' long' s et voir ce qui se passe. 'int myInt = 1L' –

Répondre

22

La conversion de char (type 2 octets) à int (un type de 4 octets) est implicite en Java, car cela est une conversion étendue - toutes les valeurs possibles que vous pouvez stocker dans un char vous pouvez stocker également dans un int. La conversion inverse n'est pas implicite car il s'agit d'une conversion qui se rétrécit: elle peut perdre des informations (les deux octets supérieurs du int sont ignorés). Vous devez toujours lancer explicitement de tels scénarios, comme un moyen de dire au compilateur "oui, je sais que cela peut perdre des informations, mais je veux toujours le faire."

+0

Merci, cela a beaucoup de sens. – worker1138

2

Si les règles C sont quelque chose d'aller, votre personnage peut être automatiquement convertie en un int sans plâtre dans votre premier exemple, que la conversion ne comporte pas une perte d'information.

Cependant, une distribution explicite est nécessaire dans votre second cas, où il y a possibilité de perdre des informations depuis char est plus petit qu'un int.

+8

Vous ne devriez pas essayer de déduire les règles de typage de Java à partir de C. Si vous ne connaissez pas Java, vous feriez mieux de ne pas essayer de répondre aux questions Java, IMO. –

+4

Je connais Java, je suis juste plus précis sur les règles de typage de C. Basé sur mes expériences Java, basé sur le fait que Java est largement basé sur C et basé sur mon observation que Java ne contredit pas les règles C que je connais , J'ai posté ma réponse. –