143 votes

Réglage de la valeur courte Java

J'écris un petit code en J2ME. J'ai une classe avec une méthode setTableId(Short tableId) . Maintenant, quand j'essaie d'écrire setTableId(100) cela donne une erreur de compilation. Comment puis-je définir la valeur courte sans déclarer une autre variable courte ?

Lors du réglage Long Je peux utiliser la valeur setLongValue(100L) et ça marche. Alors, qu'est-ce que L signifie ici et quel est le caractère pour Short valeur ?

Merci

0 votes

L est juste un suffixe utilisé pour indiquer un long littéral.

225voto

Lauri Points 1812

En Java, les littéraux entiers sont de type int par défaut. Pour certains autres types, vous pouvez suffixer le littéral avec une lettre insensible à la casse comme L , D , F pour spécifier un long, un double ou un flottant, respectivement. Notez qu'il est d'usage d'utiliser des lettres majuscules pour une meilleure lisibilité.

La spécification du langage Java ne fournit pas le même sucre syntaxique pour les types octet ou court. Au lieu de cela, vous pouvez les déclarer comme tels en utilisant un casting explicite :

byte foo = (byte)0;
short bar = (short)0;

Dans votre setLongValue(100L) vous ne devez pas nécessairement inclure l'appel de la méthode L car dans ce cas, le littéral int est automatiquement élargi à un long. C'est ce qu'on appelle la conversion primitive par élargissement dans la spécification du langage Java.

19 votes

Il existe également des suffixes pour d'autres types : d / D fait un double y f / F fait un flotteur !

6 votes

De plus, les littéraux qui entrent dans la taille n'ont pas besoin d'être coulés : vos deux exemples fonctionnent également sans coulage.

0 votes

Vous avez raison sur les deux. J'aurais dû préciser que je parle ici de littéraux entiers, et non de littéraux à virgule flottante.

39voto

er4z0r Points 1353

Il n'existe pas d'octet ou de littéral court. Vous devez convertir en court en utilisant (short)100

21voto

matt burns Points 6072

En général, vous pouvez simplement convertir la variable en une variable de type short .

Vous pouvez également rencontrer des problèmes de ce genre qui peuvent être déroutants. Cela est dû au fait que le + l'opérateur les promeut vers un int

enter image description here

Couler les éléments ne servira à rien :

enter image description here

Vous devez exprimer l'expression :

enter image description here

2 votes

N'oubliez pas qu'il y a une raison pour laquelle court + court = int. Si la somme de deux short est supérieure à la valeur maximale de short de la machine, la couler en short produira des résultats inattendus ou lèvera une exception, si la languaje le permet.

15 votes

Avec cette logique, l'addition de deux ints renverrait un long ;)

1 votes

Et je recherche cela si mes sommes peuvent dépasser Integer.MAX_VALUE. Je ne défends pas la décision de retourner des int (qui est probablement liée à la façon dont le HW effectue les calculs), je dis simplement que les gens devraient confirmer que le résultat remplit réellement un short avant de l'y mettre. J'ai rencontré plus de bugs en limitant la capacité des courts que des int, probablement à cause de la taille des nombres impliqués. 2 minuscules octets réservoirs java pour les courts plafonnent très vite.

10voto

Lawrence Dol Points 27976

Vous pouvez utiliser setTableId((short)100) . Je pense que cela a été modifié dans Java 5 de sorte que les littéraux numériques assignés à un octet ou à un court et dans la plage de la cible sont automatiquement considérés comme le type de la cible. Les dernières JVM de J2ME sont cependant dérivées de Java 4.

0 votes

PS : Bienvenue dans la douleur du codage pour J2ME, coincé au milieu de l'âge. J'ai hâte que les appareils portables rattrapent les ordinateurs de bureau de l'an 2000.

3 votes

Il n'y a pas de "J4" (et pas de "J5"). S'il vous plaît, ne rendez pas le système de noms et de versions de Java encore plus confus qu'il ne l'est déjà.

2 votes

@Joachim : Java 1, Java 2, Java 5, Java 6 et Java 7 sont bien connus et sont ainsi référencés ; il n'est pas trop difficile d'extrapoler ce que signifieraient Java 3 et Java 4. "Jn" est simplement une abréviation de l'évidence. L'adoption de la nomenclature actuelle (et, espérons-le, définitive) de Sun pour toutes les versions réduit la confusion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X