Pourquoi ne puis-je pas utiliser \ u000D et \ u000A en tant que CR et LF en Java?

Pourquoi ne puis-je pas utiliser \ u000D et \ u000A en tant que CR et LF en Java? Cela donne une erreur lorsque je comstack le code:

illegal line end in character literal 

Les échappements Unicode sont prétraités avant l’exécution du compilateur. Par conséquent, si vous mettez \u000A dans un littéral de type chaîne comme ceci:

 Ssortingng someSsortingng = "foo\u000Abar"; 

Il sera compilé exactement comme si vous écriviez:

 Ssortingng someSsortingng = "foo bar"; 

S’en tenir à \r (retour chariot; 0x0D ) et \n ( 0x0A ligne; 0x0A )

Bonus: Vous pouvez toujours vous amuser avec ceci, surtout compte tenu des limitations de la plupart des surligneurs de syntaxe. La prochaine fois que vous aurez une seconde, essayez d’exécuter ce code:

 public class FalseIsTrue { public static void main(Ssortingng[] args) { if ( false == true ) { //these characters are magic: \u000a\u007d\u007b System.out.println("false is true!"); } } } 

Parce qu’il se situe dans la plage des caractères de contrôle Unicode

Qui est U+0000–U+001F et U+007F .

Les caractères de contrôle Unicode sont utilisés pour contrôler l’interprétation ou l’affichage du texte, mais ces caractères eux-mêmes n’ont aucune représentation visuelle ou spatiale.

Ils peuvent être échappés en utilisant \ comme décrit dans la réponse ci-dessus par @Mark

DEPUIS RFC :

2.5. Cordes

La représentation des chaînes est similaire aux conventions utilisées dans la famille C des langages de programmation. Une chaîne commence et se termine par des guillemets. Tous les caractères Unicode peuvent être placés entre guillemets, à l’exception des caractères qui doivent être échappés: guillemet, inversion solidus et les caractères de contrôle (U + 0000 à U + 001F).

Tout personnage peut être échappé.