54 votes

Un caractère de nouvelle ligne unicode( \u000d ) en Java

Voyons l'extrait de code suivant en Java.

public class Main {
    public static void main(String[] args) {
        // new Character(' \u000d System.out.println("Hello");
    }
}

Dans le code ci-dessus, bien que la seule ligne de la section main() est commentée, elle affiche la sortie Hello sur la console, même s'il semble que cette ligne commentée contienne quelques erreurs de syntaxe. Si cette ligne est décommentée, elle ne fonctionnera pas du tout, ce qui entraînera une erreur de compilation.

Pourquoi est-ce qu'il affiche "Hello" ici ?

57voto

SLaks Points 391154

Java analyse les codes d'échappement des caractères dans le code source, et pas seulement les chaînes de caractères.
Cela vous permet d'utiliser des identifiants Unicode sans encodage Unicode.

Par conséquent, le \u000d dans le commentaire est analysé comme une nouvelle ligne, ce qui termine le commentaire et commence un initialisateur d'instance.

6voto

Jagger Points 2869

En fait, c'est l'une des énigmes de Java.

Casse-tête 2 : Imprimante de lignes

Je recommande vraiment de lire le livre en entier.

1voto

Eric Points 36290

C'est ce que vous essayez de faire ?

package newline;

final class Sample
{
    Character a = new Character('\u000d');
    System.out.println("Hello");
}

final public class Main 
{
    public static void main(String[] args) 
    {
        Sample s=new Sample();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X