Barre oblique inverse (\) de se comporter différemment
J'ai un petit code comme indiqué ci-dessous
public class Testing {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String firstString = sc.next();
System.out.println("First String : " + firstString);
String secondString = "text\\";
System.out.println("Second String : " + secondString);
}
}
Quand je fournir des commentaires comme texte\\ - je obtenir en sortie
First String : text\\
Second String : text\
Pourquoi je reçois deux différents chaîne de caractères lors de la saisie d'-je fournir à la première chaîne est la même que la deuxième chaîne.
Démonstration à l'www.ideone.com
`\` est un caractère d'échappement en java
OriginalL'auteur Fahim Parkar | 2012-07-15
Vous devez vous connecter pour publier un commentaire.
La double barre oblique inverse dans la console vous fournir en entrée sur runtime sont vraiment deux barres obliques inverses. Vous simplement écrit deux fois ASCII caractère barre oblique inverse.
La double barre oblique inverse à l'intérieur de la chaîne de caractères littérale signifie une seule barre oblique inverse. Parce que vous ne pouvez pas écrire une seule barre oblique inverse dans l'une chaîne littérale. Pourquoi? Parce que l'antislash est un caractère spécial qui est utilisé pour "échapper" caractères spéciaux. Par exemple: tabulation, saut de ligne, la barre oblique inverse, guillemet double. Comme vous le voyez, la barre oblique inverse est aussi un personnage qui a besoin d'être échappés. Comment voulez-vous échapper? Avec une barre oblique inverse. Ainsi, échapper à une barre oblique inverse est fait en mettant derrière une barre oblique inverse. Donc, cela se traduit par deux barres obliques inverses. Ce sera compilé dans une seule barre oblique inverse.
Pourquoi avez-vous pour échapper les caractères? Regardez cette chaîne:
this "is" a string
. Si vous voulez écrire comme une chaîne de caractères littérale en Java, vous pouvez intentionnellement pense qu'il devrait ressembler à ceci:Comme vous pouvez le voir, ce ne sera pas compilé. Afin de leur échapper comme ceci:
Droit maintenant, le compilateur sait que le
"
ne ferme pas la chaîne mais que signifie vraiment le caractère"
, parce que vous vous êtes échappé d'une barre oblique inversée.OriginalL'auteur Martijn Courteaux
Dans les Chaînes
\
est un caractère spécial, par exemple, vous pouvez l'utiliser comme\n
pour créer la nouvelle ligne de signe. Pour éteindre son sens particulier, vous devez utiliser une autre\
comme\\
. Donc, dans votre 2ème cas\\
sera interprété comme un\
caractère.Dans le cas où vous êtes la lecture de Chaînes à partir de sources externes (comme des flux) Java supposer qu'ils sont en caractères normaux, parce que les caractères spéciaux avaient déjà été convertis, par exemple, tabulation, nouvelle ligne de caractères, et ainsi de suite.
OriginalL'auteur Pshemo
Java utiliser le
\
comme un caractère d'échappement dans la deuxième chaîneÉDITÉ à la demande
Dans le premier cas, l'entrée prendre tous les caractères tapés et de l'encapsuler dans une Chaîne, de sorte que tous les caractères sont imprimés (pas d'évaluation, telles qu'elles sont lues, elles sont imprimées).
Dans le second, JVM évaluer la Chaîne entre
"
, caractère par caractère, et la première\
est lu est un méta-caractère de la protection de la seconde, de sorte qu'il ne sera pas imprimé.dans le premier cas, l'entrée prendre tous les caractères tapés et de l'encapsuler dans une Chaîne, de sorte que tous les caractères sont imprimés ; dans le second, JVM ont pour évaluer la Chaîne entre
"
, et le premier ` est lu est un méta-caractère de la protection de la seconde.pourriez-vous mettre ce point dans votre réponse par l'édition?
OriginalL'auteur cl-r
Chaîne interne de la séquence de char ne doit pas être confondu avec la séquence de caractères entre guillemets doubles spécialement parce que la barre oblique inverse a une signification particulière:
"\n\r\t\\\0" => { (char)10,(char)13,(char)9,'\\',(char)0 }
OriginalL'auteur Nahuel Fouilleul