Duvida em conversoes

10 respostas
G

Bom tou mais confuso do que antes após ler o cap 3 do livro rsrsrs

minha duvida é a seguinte,
no código abaixo é valido:

short s = 7;
mas quando tenho um método que recebe shor, deixa de ser valido eu passar apenas o 7 para ele.. ex:
class TestaAtribuiPrimitivos{
    public static void main(String[] args){
        long l = 7;
        short s = 7;  // valido
        System.out.println(new TestaAtribuiPrimitivos().invade(7)); // erro
    }
	String invade (short ships){
		return "a few";
	}

}

Todos literais inteiros sao int por padrão, mas pq posso atribuir a uma variavel o 7 e não posso fazer o mesmo em um método?

[]'s
Geraldo

10 Respostas

Omeganosferatu

Aproveitando o topico ... to com uma duvida relacionada a cast btm, nao sei se é em funçao da minha febre que nao to conseguindo raciocinar

por que eu nao posso fazer um cast de um char para um Object ???

public Object[] getSeries() {
      Object[] aseries = new Object[ getSerie().length() ];
      char[] aseriesConteudo = getSerie().toUpperCase().trim().;
      
      for ( int x = 0 ; x < aseries.length ; x++ ){
            aseries[x] = (Object) aseriesConteudo[x];
      }

Ou simplesmente

char b1 = 'g';
Object b2 = (Object) b1;

Isso nao compila.;. por que /

G
Omeganosferatu:
Aproveitando o topico ... to com uma duvida relacionada a cast btm, nao sei se é em funçao da minha febre que nao to conseguindo raciocinar

por que eu nao posso fazer um cast de um char para um Object ???

public Object[] getSeries() {
      Object[] aseries = new Object[ getSerie().length() ];
      char[] aseriesConteudo = getSerie().toUpperCase().trim().;
      
      for ( int x = 0 ; x < aseries.length ; x++ ){
            aseries[x] = (Object) aseriesConteudo[x];
      }

Ou simplesmente

char b1 = 'g';
Object b2 = (Object) b1;

Isso nao compila.;. por que /

pq char nao é um objeto.. e sim um primitivo... acho q é isso, ou estou engando?

[]'s
Geraldo

nbluis

Está certo.

tu pode criar um Objeto Character.

Omeganosferatu

Ahh podi cre… pensei nisso tambem, mas como no meu caso é um Array primitivo ja abandonei essa idéia. Fiz com substring mesmo dentro de um laço… Valeu galera

G
geraldobarboza:
Bom tou mais confuso do que antes após ler o cap 3 do livro rsrsrs

minha duvida é a seguinte,
no código abaixo é valido:

short s = 7;
mas quando tenho um método que recebe shor, deixa de ser valido eu passar apenas o 7 para ele.. ex:
class TestaAtribuiPrimitivos{
    public static void main(String[] args){
        long l = 7;
        short s = 7;  // valido
        System.out.println(new TestaAtribuiPrimitivos().invade(7)); // erro
    }
	String invade (short ships){
		return "a few";
	}

}

Todos literais inteiros sao int por padrão, mas pq posso atribuir a uma variavel o 7 e não posso fazer o mesmo em um método?

[]'s
Geraldo

hehehe só pra lembrar q essa ainda nao teve resposta....
[]'s

Omeganosferatu

A explicação exata eu nao sei mas acho que é justamente por padrão ele ser um int. Quando você atribui ele entende que aquilo será um short. Mas quando é passado no método ele o enxerga como int ... se você fizer um cast (short) 7 ... funciona tambem.
Estranho mas faz sentido.

class TestaAtribuiPrimitivos{
     public static void main(String[] args){
         long l = 7;
         short s = 7;  // valido
         System.out.println(new TestaAtribuiPrimitivos().invade( (short)7 ) ); // erro
     }
 	String invade (short ships){
 		return "a few";
 	}
 
 }
R

Na verdade, short s = 7; funciona porque excepcionalmente em operações de atribuição, o compilador coloca o cast implicitamente, ou seja… o compilador vai interpretar essa linha como short s = (short) 7;

como você está passando o literal 7 (que, por default, é int) como argumento de um método que espera um short, o compilador não fará essa conversão implicitamente (pois, como falei, isso só acontece na atribuição) e, naturalmente, dá erro de compilação.

[]'s

G

RafaelVS:
Na verdade, short s = 7; funciona porque excepcionalmente em operações de atribuição, o compilador coloca o cast implicitamente, ou seja… o compilador vai interpretar essa linha como short s = (short) 7;

como você está passando o literal 7 (que, por default, é int) como argumento de um método que espera um short, o compilador não fará essa conversão implicitamente (pois, como falei, isso só acontece na atribuição) e, naturalmente, dá erro de compilação.

[]'s

hum… agora entendi…
o cast é feito implicitamente apenas nas atribuições… e nos métodos tem que estar explicito…
valew
[]´s
Geraldo Barboza

LPJava

so uma dica seu array, nao é primitivo, ele apenas aceita elementos do tipo primitivo, mas no fundo ele é um objeto… array sempre é um objeto… sei que isso pode ser ridiculo… mas no exame teve uma pegadinha como essa… envolvendo Wrapper misturados com primitivos…

Omeganosferatu

é eu me expressei mal … um array de tipos primitivos … =)…

Criado 13 de junho de 2007
Ultima resposta 14 de jun. de 2007
Respostas 10
Participantes 5