Le compilateur java convertit automatiquement une valeur char en un int, un code comme celui-ci ne lèvera pas d'erreur:

public void foo(int i){
   // do something
}

char c = 'a';
foo(c);

Existe-t-il un moyen d'empêcher le compilateur de toujours convertir des caractères en int ou de lancer une erreur?

1
GrandfatherClock 27 janv. 2019 à 09:24

3 réponses

Meilleure réponse

Par défaut, le compilateur élargit la conversion pour les types primitifs mentionnés https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2.

Ainsi, il convertit automatiquement char en int.

Vous pouvez l'éviter en utilisant Integer dans foo. void foo(Integer i)

2
mukesh210 27 janv. 2019 à 06:39

Java utilise le code ASCII de ce caractère que vous avez passé à votre fonction.

Donc code ci-dessous:

 char c = 'a';
    foo(c);

public void foo( int i){
    System.out.println(i);
}

Aura une sortie de: 97 qui est 'a' char équivalent dans int

De plus, si l'expression [sur le côté droit] est une expression constante de type byte, short, char ou int:

  • Une conversion primitive restrictive peut être utilisée si la variable est de type byte, short ou char, et la valeur de la constante expression est représentable dans le type de la variable.

Ce que vous devez savoir, c'est que int est un type primitif en java mais que nous pouvons utiliser des classes wrapper à la place comme Integer , Character , ....

Afin que vous puissiez utiliser:

public void foo( Integer i){
        System.out.println(i);
    }

Qu'il lèvera une exception:

 java: incompatible types: char cannot be converted to java.lang.Integer
0
Amas 27 janv. 2019 à 07:03

Vous pouvez utiliser le wrapper class de type int comme paramètre de méthode comme ci-dessous,

public void foo(Integer i){
   // do something
}

char c = 'a';
foo(c);

Cela affichera une erreur de compilation.

0
Sandeepa 27 janv. 2019 à 06:42