黑马程序员技术交流社区

标题: 关于 @字符 逐字指定的用法 [打印本页]

作者: 钱灿    时间: 2012-7-6 21:06
标题: 关于 @字符 逐字指定的用法
本帖最后由 钱灿 于 2012-7-6 22:34 编辑

@" how: are you? "   不等价于  \" how: are you? \"  (和逐字指定文件名弄混淆了……呵呵)
也不等价于
@" how:
are
you? "
有点明白了……{:soso_e100:}


作者: 古古头    时间: 2012-7-6 22:04
不一样,最后一个包含换行符,和上面的两个不一样。
作者: 钱灿    时间: 2012-7-6 22:09
古古头 发表于 2012-7-6 22:04
不一样,最后一个包含换行符,和上面的两个不一样。

换行符不是忽略掉了吗
作者: 钱灿    时间: 2012-7-6 22:12
古古头 发表于 2012-7-6 22:04
不一样,最后一个包含换行符,和上面的两个不一样。

还有个问题是:
string a;

a = @"how are you"; 为什么测试时等价于 a = "how are you";
这是怎么一回事?

作者: 古古头    时间: 2012-7-6 22:21
@符号表示编译器将逐字解析此字符串常量。
也就是说,这个字符串在源文件里是什么样就解析成什么样(除了双引号,如果加了@符号只能用两个双引号表示一个双引号),
而其它的字符串,它原本是什么解析出来还是什么,不可能像不加@符号时,\t表示什么,\n表示什么那样了。
你说的@"how are you"与"how are you"在解析式都是逐字解析的(因为没有'\'转义符什么的)
作者: 肖琦    时间: 2012-7-6 22:27
转义符和原义符

两者都是针对字符串而言的,他们各有各的用途
先介绍一下转义符吧(之前我其他地方的回帖有,直接粘过来):
·一种特殊的字符常量;
·以反斜线"\"开头,后跟一个或几个字符。
·具有特定的含义,不同于字符原有的意义,故称“转义”字符。
·主要用来表示那些用一般字符不便于表示的控制代码。
·它的作用是消除紧随其后的字符的原有含义
·用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”
·用可以看见的字符表示那不可以看见的字符, 如'\n'表示换行


常用的转义字符及其含义:
\’ 单引号
\” 双引号
\\ 反斜杠
\0 空
\a 警告(产生峰鸣)
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符

以上列的是转义符,其中前三个是因为在字符串中只是要显示斜杠后的东西,但编译器通不过,因此要使用斜杠转义,而如果直接在字符串前加@就不需要斜杠转义,@就是原义字符
后面的一些转义符就有特殊用途;

希望对你有所帮助,不足请指正
作者: 钱灿    时间: 2012-7-6 22:29
古古头 发表于 2012-7-6 22:21
@符号表示编译器将逐字解析此字符串常量。
也就是说,这个字符串在源文件里是什么样就解析成什么样(除了双 ...

你是对的……:)……谢谢了
作者: 戴水平    时间: 2012-7-8 12:00
Console.WriteLine(@" how:
                                are
                                you? "
                            );
这个的话@帮你转义了换行how:
                                are
                                you?
            Console.WriteLine(@" how: are you? ");
这个输出的就是how: are you?
             Console.WriteLine(\" how: are you? \" );
\是转义字符你直接这样写就错了,必须加@或者再加\表示换行


作者: 侯慧杰    时间: 2012-7-8 17:04
@只对紧跟其后的字符串里的字符做转义处理,@后面的在后面的字符串就转义不到了。。。亲。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2