Piszę mały kod w J2ME. Mam klasę z metodą setTableId(Short tableId)
. Teraz, kiedy próbuję pisać setTableId(100)
, daje to błąd czasu kompilacji. Jak ustawić wartość short bez deklarowania innej zmiennej short?
Przy ustawianiu Long
wartości mogę używać setLongValue(100L)
i działa. Co to więc L
oznacza i jaki charakter ma Short
wartość?
Dzięki
java
literals
primitive-types
Mubaszar
źródło
źródło
L
jest tylko przyrostkiem używanym do oznaczenialong
literału.Odpowiedzi:
W Javie, literały liczb całkowitych są domyślnie typu int. Dla niektórych innych typów, można sufiks dosłowne ze bez uwzględniania wielkości liter pisma jak
L
,D
,F
aby określić długo, podwójne lub pacy, odpowiednio. Zauważ, że powszechną praktyką jest używanie wielkich liter dla lepszej czytelności.Specyfikacja języka Java nie zapewnia tego samego cukru składniowego dla typów bajtowych i krótkich. Zamiast tego możesz zadeklarować to jako takie, używając jawnego rzutowania:
W
setLongValue(100L)
wywołaniu metody nie musisz koniecznie uwzględniaćL
sufiksu, ponieważ w tym przypadku literał int jest automatycznie rozszerzany do long. Nazywa się to rozszerzającą prostą konwersją w specyfikacji języka Java.źródło
d
/D
tworzy adouble
if
/F
tworzy zmiennoprzecinkowe!0
jak(short)0
obejść topossible lossy conversion from int to short
błąd, choć 0 jest krótki.Nie ma czegoś takiego jak bajt lub krótki literał. Musisz rzucić na krótkie użycie
(short)100
źródło
Ogólnie rzecz biorąc, możesz po prostu rzutować zmienną na plik
short
.Możesz również mieć takie problemy, które mogą być mylące. Dzieje się tak, ponieważ
+
operator promuje je do plikuint
Rzucanie elementów nie pomoże:
Musisz rzucić wyrażenie:
źródło
Możesz użyć
setTableId((short)100)
. Myślę, że zostało to zmienione w Javie 5, więc literały numeryczne przypisane do bajtu lub krótkiego i mieszczącego się w zakresie celu są automatycznie przyjmowane jako typ docelowy. Jednak najnowsze maszyny JVM J2ME wywodzą się z języka Java 4.źródło