Pegadinha

5 respostas
Y

Compila ou não??

class teste{
  public static void main (String[] args) {
    String a = "\n";      // 1
    String b = "\r";      // 2
    String c = "\u000a";  // 3  \u000a = new line
    String d = "\u000d";  // 4  \u000d = return
  }

}

5 Respostas

C

NAO!@@@@@@@@@@@@@@!!!

I

Por que nao?? :?:

[ ]'s
Icarus

F

nao compila!

nas linhas:

String c = "\u000a";  // 3  \u000a = new line
    String d = "\u000d";  // 4  \u000d = return

o \u nao eh um caractere de escape valido, se quisece usar o char ‘\u000a’, teria q por entre aspas simples, e mesmo assim ainda teria q converter pra string (pq senao seria outro erro tentar atribuir um char a uma string)

J

acho que compila, apesar de parecer como codigo unicode esta entre aspas duplas entao seria um simples string. certo?

C

O que acontece é que existe um pré processamento. Antes do código ir para o compilador, todos os códigos unicode são traduzidos. Dessa forma, a linha:

String c = "\u000a";
String d = "\u000d";

é vista pelo compilador como:

String  c =
;
String d = ";

Isso é legal pq mesmo se vc comentar o código ele não vai funcionar…

//String c = "\u000a";

Isso pq o compilador vai enxergar como:

//String c = 
;

Agora, se vc comentar como /* */, já funciona…

Dá uma olhada na JLS:
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html
, seção 3.10.4:

“Because Unicode escapes are processed very early, it is not correct to write ‘\u000a’ for a character literal whose value is linefeed (LF); the Unicode escape \u000a is transformed into an actual linefeed in translation step 1 (§3.3) and the linefeed becomes a LineTerminator in step 2 (§3.4), and so the character literal is not valid in step 3. Instead, one should use the escape sequence ‘\n’ (§3.10.6). Similarly, it is not correct to write ‘\u000d’ for a character literal whose value is carriage return (CR). Instead, use ‘\r’.”

[]'s
carisio

Criado 22 de setembro de 2004
Ultima resposta 7 de nov. de 2004
Respostas 5
Participantes 6