Des choses très étranges avec les caractères Java

Le mystère de l'erreur de commentaire et autres histoires...

introduction

Savez-vous que ce qui suit est une expression Java valide ?





\u0069\u006E\u0074 \u0069 \u003D \u0038\u003B
      
      



Vous pouvez essayer de le copier et le coller dans la méthode principale de n'importe quelle classe et de le compiler. Si vous ajoutez ensuite la déclaration suivante





System.out.println(i);
      
      



et après compilation exécuter cette classe, le code imprimera le nombre 8 !





Saviez-vous que ce commentaire renvoie plutôt une erreur de syntaxe au moment de la compilation ?





/*
 * The file will be generated inside the C:\users\claudio folder
 */
      
      



Cependant, les commentaires ne doivent pas conduire à des erreurs de syntaxe. En fait, les programmeurs commentent souvent des extraits de code afin que le compilateur les ignore... alors que se passe-t-il ?





, , Java  char



.





char

char



Java.  .  ,  char



:





char aCharacter = 'a';
      
      



, .  , , .  :





String s = "Java melius semper quam latinam linguam est";
      
      



  char



, :





  • '&'



    ).





  • Unicode (, '\u0061'



    ,  97   'a'



    ).





  • escape- (, '\n'



       ).





.





, , char



, ,     (,  «Canc»  «Enter»  ). 





«Esc» — vesper-bot.





,  char



,    .  :





char aUppercase = 'A';
char minus = '-';
char at = '@';
      
      



char



2 (16 ), 0 65 535. , «», .  ( )   Unicode ( ).





Unicode ( )

,   char



16 ​​ 65 536 .  Unicode  ( , , . .), . Unicode - ,  UTF-8, , , 8-   ASCII, , , , ASCII code (  American Standard Code for Information Interchange).





Unicode char



, 4 , ,  \u



( ). :





char phiCharacter = '\u03A6';  // Capital Greek letter Φ
char nonIdentifiedUnicodeCharacter = '\uABC8';
      
      



  Unicode (  ). , 4 65 536 .





Java 15 Unicode 13.0, , 65 536 .  Unicode , 143 859 .     .   , Unicode, 16- char



,   String



   Character



, , .





escape-

 char



  escape-, , :





  • \b



     backspace, (  Delete).





  • \n



      (  Ente).





  • \\



     \ ( , \ escape-).





  • \t



    (  TAB).





  • \'



      ( ).





  • \"



      ( ).





  • \r



       ( , ).





  • \f



       ( , , ).





,  '"'



  , :





System.out.println('"');
      
      



:





char doubleQuotes = '"';
System.out.println(doubleQuotes);
      
      



:





"
      
      



escape- , , :





System.out.println(''');
      
      



, :





error: empty character literal
        System.out.println(''');
                           ^
error: unclosed character literal
        System.out.println(''');
                             ^
2 errors
      
      



, . , :





System.out.println("'IQ'");
      
      



:





'IQ'
      
      



, \"



escape-, . , :





System.out.println(""IQ"");
      
      



:





error: ')' expected
        System.out.println(""IQ"");
                             ^
error: ';' expected
        System.out.println(""IQ"");
                               ^
2 errors
      
      



:





System.out.println("\"IQ\"");
      
      



:





"IQ"
      
      



Java Unicode

Unicode . ,  Unicode , . , :





int i = 8;
      
      



:





\u0069\u006E\u0074 \u0069 \u003D \u0038\u003B
      
      



, :





System.out.println("i = " + i);
      
      



:





i = 8
      
      



, .  , , () .





Unicode escape-

, Unicode , escape-. ,    , escape- \n



.  Unicode  10 (  A). , Unicode:





char lineFeed = '\u000A';
      
      



:





error: illegal line end in character literal
        char lineFeed = '\u000A'; 
                        ^
1 error
      
      



, :





char lineFeed = '
';
      
      



Unicode    , Java.





, '



,   39 (  27) escape- \', Unicode:





char singleQuote = '\u0027';
      
      



:





char singleQuote = ''';
      
      



:





error: empty character literal

        char singleQuote = '\u0027';
                    ^

error: unclosed character literal

        char singleQuote = '\u0027';
                           ^
2 errors
      
      



, , , .





, D ( 13) escape- \r



. , :





char carriageReturn = '\u000d';
      
      



:





error: illegal line end in character literal

char carriageReturn = '\u000d';
                      ^
1 error
      
      



, Unicode   , , , , .





 ,



,  92 (  5C) escape- \



, :





char backSlash = '\u005C';
      
      



:





error: unclosed character literal
        char backSlash = '\u005C'
                         ^  
1 error
      
      



, :





char backSlash = '\';
      
      



  '



escape-, , .





,  "



,  22 (  34) escape- "



, :





char quotationMark = '\u0022';
      
      



.  :





String quotationMarkString = "\u0022";
      
      



:





error: unclosed string literal

   String quotationMarkString = "\u0022";
                                       ^

1 error  
      
      



:





String quotationMarkString = """;
      
      



Unicode,      . , , , !





// char lineFeed = '\u000A';  
// char carriageReturn = '\u000d'; 
      
      



,       , ;  ! 





, , :





/* char lineFeed = '\u000A';  
   char carriageReturn = '\u000d'; */
      
      



, - , -    \u



. , :





/*
 * The file will be generated inside the C:\users\claudio folder
 */
      
      



4  \u



, :





error: illegal unicode escape

* The file will be generated inside the C:\users\claudio folder
                                             ^
1 error
      
      



,   char



Java .  , , Java, Unicode.  , Unicode , .  , , , .





: 3.3.5 « » 1 «Java »  ( 3.3.5 «»).








All Articles