Casting - gostaria de mais explicações

Gente, eu tenho que aprender mais sobre casting, e como ele funciona.
Eu fico um pouco confuso quanto a certas coisas.

Por exemplo, tenho um parâmeto que indiquei como byte. Não consigo transformar ele em String usando o toString()

Daí surge aquela máxima, de que o chefe pode ser um funcionário, mas um funcionário não pode ser chefe - Mas para mim, a transformação de um número em uma string não seria uma coisa tão complexa para a linguagem.

Eu quero saber quais casts eu posso realizar. Se vocês puderem me indicar alguns documentos ou páginas que falem a respeito, eu agradeço. Casting de objetos eu vejo mais tarde.

Obrigado pessoal.

Existem três tipos de cast:

  • O cast que é uma conversão - só vale para tipos primitivos, e String NÃO É um tipo primitivo. Por exemplo: long -> int
long x = 10;
int y = (int) x;
  • O cast de um objeto de uma classe para uma superclasse ou interface (upcast). Isso é automático:
ArrayList a = new ArrayList();
List l = (List) a;
  • O cast de um objeto de uma classe para uma subclasse. (downcast) Isso pode lançar uma ClassCastException se não for possível.
Number n = new Integer(10);
Integer x = (Integer) n; // possível
Long y = (Long) n; // dá um ClassCastException

Converter alguma coisa de/para String não pode ser feito com "cast".

[quote] Number n = new Integer(10);
Integer x = (Integer) n; // possível[/quote]
Perfeito. Você criou um inteiro e deu um cast nele para inteiro mesmo, ou seja, é possível

Isso que eu acho um pouco confuso. Um inteiro cabe em um long, e dependendo do valor, o contrário não se aplicaria. Mas não estamos falando de valores, e sim de tipos.

Eu sempre posso descer um nível então? Por exemplo, eu posso dar um cast de um int pra short, mas subir eu não posso?
E como fica quando eu tenho que transformar um número para String, como no meu caso agora?

achei thingol
http://www.j2eebrasil.com.br/jsp/tutoriais/tutorial.jsp?idTutorial=002_005

valeu pela ajuda pessoal

Isso, você pode dar um cast sempre para tipos que comportam mais dados, mas você não pode dar um cast de int para byte, o compilador acusaria perda de precisão.

Agora, se você quer converter um int para string pode fazer o seguinte

String number = new Integer(123).toString();

[quote=balarini]Eu sempre posso descer um nível então? Por exemplo, eu posso dar um cast de um int pra short, mas subir eu não posso?
E como fica quando eu tenho que transformar um número para String, como no meu caso agora?[/quote]

Para os tipos primitivos, todos os casts são possíveis, só que alguns são automáticos (ou seja, opcionais), e outros não.

long -> int : nesse caso é obrigatório, porque diminui a precisão:
long x = 10;
int y = (int) x;

int -> long : nesse caso é opcional, porque aumenta a precisão:
int x = 10;
long y = (long) x; // poderia usar long y = x;

thiago, o que você me disse ajudou bastante, mas daí já foge de casting não é verdade? Porque o código que você está passando na verdade cria uma String com o conteúdo que eu quiser, não é isso?

Eu vou estudar um pouco mais. Estava tão acostumado a utilizar outras linguagens, que esqueci alguns conceitos. Só acho que quando começar a estudar casting de Objetos, eu vou querer me jogar da janela.

Muito pelo contrário. Se você souber desenhar diagramas de classes em UML vai ver que casting só é possível seguindo as "setas". Por exemplo:

Object <- Number <- Integer
                           <- Long
          <- String

Você pode efetuar o cast de um Long para um Number (upcast) e de um Number para um Long (downcast); de um Integer para um Long, como não há nenhuma seta ligando o Integer ao Long, não consegue fazer com certeza.

Eu achava que isso era mais exato. Esse lance de perda de precisão me preocupa um pouco.

Eu achava que isso era mais exato. [/quote]

Casting é exato. O thingol quis dizer que, como Integer e Long não têm relacionamento de herança, com certeza não dá pra fazer cast.

Ocorre perda de precisão quando você quer acomodar o conteúdo de um long em um int, por exemplo. Como int não armazena a mesma quantidade de bytes que um long, você perderá a precisão indicada pelos bytes que “não couberem” no int.

como converter uma VARIAVEL de classe pra String:

ex: tenho uma classe Endereço, e uma classe Pessoa e crio uma variavel de endereço e quero transformar essa variavel pra String… como faço.

Aproveitem e façam-me a gentileza de ver se não escrevi nenhuma bobagem…
http://www.guj.com.br/posts/list/34091.java#182009

Nino, toda classe em Java é filha(extends) da classe Object, que tem um método chmado toString();
Você pode na sua classe Endereço, por exemplo, sobrescrever esse método. Por exemplo, assim:

class Endereco{
	String
		logradouro,
		numero,
		complemento,
		bairro,
		cidade,
		uf,
		cep
	;
	Date
		desde
	;

	/*getters e setters e outros métodos*/

	/* 
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return
			"Logradouro: " + logradouro + "\n" +  
			"No.: " + numero + "\n" +  
			"Complemento: " + complemento + "\n" +
			"Bairro: " + bairro + "\n" +
			"Cidade: " + cidade + "\n" +
			"UF: " + uf + "\n" +
			"CEP: " + cep + "\n" +
			"Residente desde: " + desde.toString()
		;
	}
}

Quando quiser ober a String de Endereco, é só invocar

... Endereco endereco = new Endereco(...); ... String end = endereco.toString();

Valeu cara… ficou bem mais claro agora…

Abs