Estou escrevendo um pequeno código em J2ME. Eu tenho uma aula com um método setTableId(Short tableId)
. Agora quando tento escrever setTableId(100)
dá erro de tempo de compilação. Como posso definir o valor curto sem declarar outra variável curta?
Ao definir o Long
valor posso usar setLongValue(100L)
e funciona. Então, o que L
significa aqui e qual é o caractere de Short
valor?
obrigado
java
literals
primitive-types
Mubashar
fonte
fonte
L
é apenas um sufixo usado para indicar umlong
literal.Respostas:
Em Java, literais inteiros são do tipo int por padrão. Para alguns outros tipos, você pode sufixo literal com uma letra maiúsculas e minúsculas, como
L
,D
,F
para especificar um longo, duplo ou float, respectivamente. Observe que é uma prática comum usar letras maiúsculas para melhor legibilidade.A especificação da linguagem Java não fornece o mesmo açúcar sintático para tipos de byte ou curtos. Em vez disso, você pode declará-lo usando uma conversão explícita:
Em sua
setLongValue(100L)
chamada de método, você não precisa necessariamente incluir oL
sufixo porque, neste caso, o literal int é automaticamente ampliado para um longo. Isso é chamado de conversão primitiva de ampliação na Especificação da linguagem Java.fonte
d
/D
faz adouble
ef
/F
faz um float!0
como(short)0
obter em torno de umpossible lossy conversion from int to short
erro, mesmo que 0 é um curta.Não existe um byte ou literal curto. Você precisa lançar em curto usando
(short)100
fonte
Geralmente, você pode apenas converter a variável para se tornar um
short
.Você também pode ter problemas como esse que podem ser confusos. Isso ocorre porque o
+
operador os promove a umint
Lançar os elementos não vai ajudar:
Você precisa lançar a expressão:
fonte
Você pode usar
setTableId((short)100)
. Acho que isso foi alterado no Java 5 para que literais numéricos atribuídos a byte ou curto e dentro do intervalo para o destino sejam automaticamente considerados como o tipo de destino. No entanto, os JVMs J2ME mais recentes são derivados do Java 4.fonte