O operador + concatena Strings se um dos operandos da operação usando + for uma String.
No caso abaixo, se nenhum dos operandos é uma String porque o programa compila e roda sem erros???
Putz cara, essa é meio embaçado de responder, mas também é bastante interessante…
Eu acho que deve ter alguma coisa relacionada com o método toString(), pois todos os tipos em java herdam de Object, e a classe Object tem o método toString(). Assim, como o true e false são tipos da classe Boolean que implementa o toString(), pode ser que na hora da chamada do println ele chame o toString() do valor true ou false e assim ele se torna uma String, podendo ser concatenada com o null.
Não sei se null também funciona desta maneira. Provavelmente sim…
Não tenho certeza do que eu disse, foi só uma suposição. Se eu estiver errado peço que me corrijam
Um abraço
Franklin
marciolx
ok, obrigado!
ozielneto
O que acontece é o seguinte…
A Classe String tem algumas particularidades em relação á outros tipos no Java.
Ela tem alguns operadores sobrecarregados. ex. +, +=
Toda vez que se concatena dois objetos, gera-se uma nova String a partir do resultado do metodo toString() deles que ficará disponícel no StringPool da JRE.
Os tipos primitivos são transformados em String, antes de serem concatenados.
quer dizer então que no código abaixo, a linha //a NÃO dá erro, porque de alguma forma toString() é aplicado sobre null e a linha b dá erro porque o operador + está sendo aplicado sobre dois primitivos???
publicclassTestConc3{publicstaticvoidmain(String[]args){System.out.println(3+null);// aSystem.out.println(3+true);// b}}/*C:Scopusjava2003certTestConc3.java:4: operator + cannot be applied to int,boolean System.out.println (3 + true); ^1 error*/
ozielneto
é isso ai…
marciolx
entendido! , obrigado
marciolx
Soube nas minhas andanças por outros fóruns (javaranch e jdiscuss):
O método toString() só é chamado automaticamente com dois operandos do operador binário + quando um dos operandos for uma referência para um objeto da classe String. No caso, true + null ou qualquer primitivo + null deveria dar um erro de compilação.
Acho que devo me apressar e fazer minha prova logo e fuçar menos, ou logo já não vou saber mais o que é ou o que deveria ser correto. Ou então desinstalar o jdk 1.4 e voltar ao bom e velho 1.2 …
marciolx
"marciolx":
quer dizer então que no código abaixo, a linha //a NÃO dá erro, porque de alguma forma toString() é aplicado sobre null e a linha b dá erro porque o operador + está sendo aplicado sobre dois primitivos???
publicclassTestConc3{publicstaticvoidmain(String[]args){System.out.println(3+null);// aSystem.out.println(3+true);// b}}/*C:Scopusjava2003certTestConc3.java:4: operator + cannot be applied to int,boolean System.out.println (3 + true); ^1 error*/
Baixei o novo beta do sdk 1.4.2 e parece que as coisas melhoraram, o compilador apresentou todos os erros e até mais do que eu esperava: