Impossível, só vendo pra crer (ou será que só eu não sabia?!)

12 respostas
rodrigo.bossini

Por gentileza analisem friamente o seguinte trecho de código:

class Unicode{	
	public static void main (String args[]){
		//char c = '\u' ;		
		//System.out.println (a);
	}

}

Alguém pode me explicar porque raio esse treco aí em cima tá dando erro de compilação?
Veja bem, a linha char c = '\u'; está comentada!! Nunca vi isso na minha vida.

12 Respostas

lgi2020

Realmente…
Está comentado.

Boiei! :stuck_out_tongue:

rodrigo.bossini

você tentou compilar ? deu erro tbm?

Alguém dê uma luz por favor! Tô quase desistindo de tudo e virando hippie!

ajfilho

Aqui não deu erro nenhum!!!

Qual o problema que aparece para você??

Abraços!

–> Editando…

Eu acho que já sei o que tá acontecendo…

Quando se usa \ e algum dígito, o compilador entende como expressão regular, mas especificamente um caracter de escape.

Tente colocar assim

//char c = '\\u';

e veja o que acontece…

Abraços!

furutani

O erro que dá, mesmo estando comentado é Invalid unicode.

LuksS

Interessante … talvez o javac faça o parser do código-fonte antes de eliminar os comentários

furutani

Não sei se isso resolve seu problema

char c = '\\u'
rodrigo.bossini

Na verdade era mais uma curiosidade mesmo, descobri isso por acaso.

  1. char c = ‘\u’ Isso aí resolve sim o erro de compilação, que por sinal, aqui na minha jvm (6_11) é : illegal unicode scape.

Achei estranho pq pensei que o compilador simplesmente ignorasse TUDO que está comentado, o que esse exemplo claramente mostra que não é verdade.

Abraços.

T
class Unicode{    
     public static void main (String args[]){  
         //char c = '\u' ;         
         //System.out.println (a);  
     }     
}

O código acima vai dar problemas porque o compilador, na seguinte ordem:

  1. Interpreta os escapes Unicode, que são sequências que começam por “\u” e contém exatamente 4 dígitos hexadecimais (antes de tudo, até antes de interpretar os comentários!)
  2. Separa os tokens , constantes string etc.

Isso é uma característica do Java; acho que o C# não faz isso, embora tenha sido inspirado no Java.

Como há um escape Unicode inválido acima, então o programa tem um erro. É que nossos músculos estão treinados para achar que nada dentro de um comentário vai dar problemas.

O seguinte escape Unicode normalmente dá problema em programas: “\u000A”

Expliquem por quê…

class Teste { public static void main(String[] args) {
    System.out.println ("Hello, world!\u000A");
} }

Compilem o código acima e me digam qual é a mensagem de erro apresentada.

victorwss

A tradução de sequências de escape \u ocorre antes da análise léxica.

pu\u0062lic\u0020cl\u0061ss \u004C\u006F\u0075\u0063o {}
T

Este é um programa válido em Java. Experimente compilá-lo e rodá-lo.

\u0069\u006D\u0070\u006F\u0072\u0074 \u006A\u0061\u0076\u0061\u002E\u0075\u0074\u0069\u006C\u002E\u002A\u003B  
\u0063\u006C\u0061\u0073\u0073 \u0045\u0078\u0065\u0072\u0063\u0069\u0063\u0069\u006F \u007B  
\u0009\u0070\u0075\u0062\u006C\u0069\u0063 \u0073\u0074\u0061\u0074\u0069\u0063 \u0076\u006F\u0069\u0064 \u006D\u0061\u0069\u006E\u0028\u0053\u0074\u0072\u0069\u006E\u0067\u005B\u005D \u0061\u0072\u0067\u0073\u0029 \u007B  
\u0009\u0009\u0053\u0063\u0061\u006E\u006E\u0065\u0072 \u0073\u0063\u0061\u006E \u003D \u006E\u0065\u0077 \u0053\u0063\u0061\u006E\u006E\u0065\u0072 \u0028\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u0069\u006E\u0029\u003B  
 \u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074 \u0028\u0022\u004E\u006F\u006D\u0065 \u0064\u0061 \u0070\u0072\u0069\u006D\u0065\u0069\u0072\u0061 \u0070\u0065\u0073\u0073\u006F\u0061\u003A \u0022\u0029\u003B  
\u0009\u0009\u0053\u0074\u0072\u0069\u006E\u0067 \u006E\u006F\u006D\u0065\u0031 \u003D \u0073\u0063\u0061\u006E\u002E\u006E\u0065\u0078\u0074\u004C\u0069\u006E\u0065\u0028\u0029\u003B  
 \u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074 \u0028\u0022\u0050\u0065\u0073\u006F \u0065\u006D \u006B\u0067\u003A \u0022\u0029\u003B  
\u0009\u0009\u0069\u006E\u0074 \u0070\u0065\u0073\u006F\u0031 \u003D \u0073\u0063\u0061\u006E\u002E\u006E\u0065\u0078\u0074\u0049\u006E\u0074\u0028\u0029\u003B \u0073\u0063\u0061\u006E\u002E\u006E\u0065\u0078\u0074\u004C\u0069\u006E\u0065\u0028\u0029\u003B  
 \u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074 \u0028\u0022\u004E\u006F\u006D\u0065 \u0064\u0061 \u0073\u0065\u0067\u0075\u006E\u0064\u0061 \u0070\u0065\u0073\u0073\u006F\u0061\u003A \u0022\u0029\u003B  
\u0009\u0009\u0053\u0074\u0072\u0069\u006E\u0067 \u006E\u006F\u006D\u0065\u0032 \u003D \u0073\u0063\u0061\u006E\u002E\u006E\u0065\u0078\u0074\u004C\u0069\u006E\u0065\u0028\u0029\u003B  
 \u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074 \u0028\u0022\u0050\u0065\u0073\u006F \u0065\u006D \u006B\u0067\u003A \u0022\u0029\u003B  
\u0009\u0009\u0069\u006E\u0074 \u0070\u0065\u0073\u006F\u0032 \u003D \u0073\u0063\u0061\u006E\u002E\u006E\u0065\u0078\u0074\u0049\u006E\u0074\u0028\u0029\u003B \u0073\u0063\u0061\u006E\u002E\u006E\u0065\u0078\u0074\u004C\u0069\u006E\u0065\u0028\u0029\u003B  
   \u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u006C\u006E \u0028\u0022\u004F \u0069\u006E\u0064\u0069\u0076\u0069\u0064\u0075\u006F \u006D\u0061\u0069\u0073 \u0070\u0065\u0073\u0061\u0064\u006F \u0065\u0068\u003A \u0022\u0029\u003B  
\u0009\u0009\u0069\u0066 \u0028\u0070\u0065\u0073\u006F\u0031 \u003E \u0070\u0065\u0073\u006F\u0032\u0029 \u007B  
   \u0009\u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066 \u0028\u0022\u0025\u0073\u002C \u0063\u006F\u006D \u0025\u0064 \u006B\u0067\u0025\u006E\u0022\u002C \u006E\u006F\u006D\u0065\u0031\u002C \u0070\u0065\u0073\u006F\u0031\u0029\u003B  
\u0009\u0009\u007D \u0065\u006C\u0073\u0065 \u0069\u0066 \u0028\u0070\u0065\u0073\u006F\u0031 \u003C \u0070\u0065\u0073\u006F\u0032\u0029 \u007B  
   \u0009\u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066 \u0028\u0022\u0025\u0073\u002C \u0063\u006F\u006D \u0025\u0064 \u006B\u0067\u0025\u006E\u0022\u002C \u006E\u006F\u006D\u0065\u0032\u002C \u0070\u0065\u0073\u006F\u0032\u0029\u003B  
\u0009\u0009\u007D \u0065\u006C\u0073\u0065 \u007B  
   \u0009\u0009\u0009\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066 \u0028\u0022\u0025\u0073 \u0065 \u0025\u0073 \u0074\u0065\u006D \u006F \u006D\u0065\u0073\u006D\u006F \u0070\u0065\u0073\u006F \u002D \u0025\u0064 \u006B\u0067\u0025\u006E\u0022\u002C \u006E\u006F\u006D\u0065\u0031\u002C \u006E\u006F\u006D\u0065\u0032\u002C \u0070\u0065\u0073\u006F\u0031\u0029\u003B  
\u0009\u0009\u007D  
\u0009\u007D  
\u007D
agodinho

e ainda reclaman de código sem comentários thingol …
tudo tão claro :twisted:

T

Mas o programa que postei tem comentários (se não me engano); é questão de você entender escapes Unicode…

Criado 15 de janeiro de 2009
Ultima resposta 16 de jan. de 2009
Respostas 12
Participantes 8