Comparando primitivos (pequena duvida)

10 respostas
diegofss11

Gostaria de saber uma explicação… eu SEI QUE É IGUAL… so gostaria da explicação

char c = 123;

char p = {;

int i = 0x7B; //123 em hexadecimal

long l = 123l;

short s = 0173;// (123 em octal)

double d = 123;

float f = 123f;

Gostaria de saber… POR QUE todos os valores acima sao iguais… sendo que na verdade eles são diferentes =/

ps: Surgiu a duvida pq estou estudando pra SCJA.

10 Respostas

renamed

Mas eles não são diferentes, estão representados em bases diferentes.

Lembre que no final, tudo vira binário.

diegofss11

aaa sim!

Entendido!

Vlw :smiley:

E

Todos os valores acima são de certa forma diferentes, já que são representados na memória de formas diferentes (ok, um short e um char ambos são representados como 2 bytes - mas a gente sempre se esquece que um char do Java é mais ou menos como se fosse um “unsigned short” do C ou C++ ou C#).

Mas numericamente eles são iguais.

romarcio

Na verdade todos os tipos menos o char, representam o nº 123.

O char c = 123; na verdade vale {

Para ser o nº 123, ele deveria ficar entre aspas simples char c = '123';.

Quando vc usa o char sem aspas, vc está usando o valor dele em decimal na tabela ASCII.

Da uma olhada na tabela ASCII aqui: http://pt.wikipedia.org/wiki/ASCII

E

Não, não, não! char c = ‘123’ é inválido sintaticamente. O valor char c = ‘{’ ou c = 123 é que representam o número 123.

romarcio

entanglement:
romarcio:

Para ser o nº 123, ele deveria ficar entre aspas simples char c = '123';.

Não, não, não! char c = ‘123’ é inválido sintaticamente. O valor char c = ‘{’ ou c = 123 é que representam o número 123.

Claro, é char, entre aspas só aceita um caracter.

Despulpa, foi dezatençção minha.

E

De qualquer maneira, você também pode usar:

char c = '\u007B';

Não há nada “especial” no tipo char. Ele é um tipo numérico como outro qualquer. Quase todos os tipos primitivos são também numéricos.

O único tipo primitivo que o Java não considera como numérico é o boolean, mais para evitar alguns erros de programação que devido ao próprio valor intrínseco (se você olhar os bytecodes correspondentes ao boolean, vai ver que o false é 0 e o true é 1. )

diegofss11

Mas c = ‘7’ poderia ne ? … ai seria 7 ne ?

ai por exemplo poderia ate comparar

char c = ‘7’;
int i = 8

if (c < i )
return true

else

return false

ai no caso retornaria TruE ne ?

E

Você está confundindo o caracter ‘7’ (cujo valor é o número 55 em decimal ou 0x37 em hexadecimal - basta procurar em uma tabela ASCII ou Unicode)
com o número 7.
São coisas diferentes.

Portanto, se você fizer esta comparação:

char c = '7';
if (c < 8)

vai constatar que c < 8 retorna false, não true.

E

Uma forma radical de pensar é o seguinte. Digamos que você tenha o seguinte caracter:

char ch = '④';

O código desse caracter (um dígito 4 dentro de uma bolinha) é, em Unicode, U+2463, ou em decimal, 9315.
Ou seja, você também pode escrever em Java:

char ch = '\u2463';

ou

char ch = (char) 9315;

e nem por isso ele é a mesma coisa que o número 4. Não é porque um caracter tem a forma do número 4 (mesmo o caracter ‘4’) que seu valor é 4.

Criado 2 de julho de 2010
Ultima resposta 2 de jul. de 2010
Respostas 10
Participantes 4