Pergunta

Eu posso criar um longo literal anexando um L com o valor; por que não posso criar uma curta literal ou byte de alguma forma semelhante? Por que eu preciso para usar um literal int com um elenco?

E se a resposta é "Porque não havia curta literal em C", então por que não há literais curtas em C?

Isto não realmente afetar a minha vida de forma significativa; é fácil o suficiente para escrever (short) 0 em vez de 0S ou algo assim. Mas a inconsistência faz-me curioso; é uma daquelas coisas que o incomodam quando você está acordado até tarde da noite. Alguém, em algum momento tomou uma decisão de design para torná-lo possível entrar literais para alguns dos tipos primitivos, mas não para todos eles. Por quê?

Foi útil?

Solução

Em C, int pelo menos era para ter o tamanho da palavra "natural" da CPU e long provavelmente foi feito para ser o tamanho da palavra "maior natural" (não tenho certeza de que a última parte, mas seria também explicar por que int e long têm o mesmo tamanho em x86).

Agora, o meu palpite é: para int e long, há uma representação natural que se encaixa exatamente registros da máquina. Na maioria dos CPUs no entanto, os tipos menores byte e short teria que ser preenchidos a um int qualquer maneira antes de ser usado. Se for esse o caso, você pode muito bem ter um elenco.

Outras dicas

Eu suspeito que é um caso de "não acrescentam nada à língua a não ser que realmente agrega valor" - e foi visto como adicionando suficientemente pouco valor para não valer a pena. Como você disse, é fácil de contornar, e, francamente, é raramente qualquer maneira necessária (somente para disambiguation).

O mesmo é verdade em C #, e eu nunca particularmente perdido em qualquer idioma. O que eu faço falta em Java é um tipo byte não assinado:)

Outra razão pode ser que a JVM não sabe sobre short e byte. Todos os cálculos e armazenamento é feito com ints, longs, floats e duplas dentro do JVM.

Há várias coisas a considerar.

1) Como discutido acima o JVM não tem noção de bytes ou tipos curtas. Geralmente estes tipos não são usados ??em computação no nível JVM; para que se possa pensar haveria menos uso desses literais.

2) Para a inicialização das variáveis ??de byte e curtos, se a expressão int é constante e na gama permitida do tipo que é implicitamente convertido para o tipo de alvo.

3) Pode-se sempre lançar a literal, ex (curta) 10

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top