为什么可以';我在Java中使用\u000D和\u000A作为CR和LF吗?

为什么可以';我在Java中使用\u000D和\u000A作为CR和LF吗?,java,unicode,Java,Unicode,为什么在Java中不能使用\u000D和\u000A作为CR和LF?当我编译代码时,它给出了一个错误: String x = "\u000A hello";//Error - Illegal escape character in string literal. Unicode转义是在编译器运行之前预处理的。因此,如果将\u000A放入如下字符串文字: String someString = "foo\u000Abar"; 它将完全按照您编写的那样进行编译: String

为什么在Java中不能使用\u000D和\u000A作为CR和LF?当我编译代码时,它给出了一个错误:

String x = "\u000A hello";//Error - Illegal escape character in string literal.

Unicode转义是在编译器运行之前预处理的。因此,如果将
\u000A
放入如下字符串文字:

String someString = "foo\u000Abar";
它将完全按照您编写的那样进行编译:

String someString = "foo
bar";
坚持使用
\r
(回车;
0x0D
)和
\n
(换行;
0x0A

奖励:您可以从中获得乐趣,特别是考虑到大多数语法高亮显示的限制。下次有时间时,请尝试运行以下代码:

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

因为它属于

这是
U+0000–U+001F
U+007F

Unicode控制字符用于控制解释或 显示文本,但这些字符本身没有视觉或视觉效果 空间表征

它们可以通过@Mark使用上面答案中描述的
\
进行转义

发件人:

2.5。字符串

字符串的表示是 类似于C语言中使用的约定 编程语言家族。A. 字符串以引号开始和结束 标志。所有Unicode字符都可以是 放在引号内 除了必须是 转义:引号,反向 索利多金币和控制字符 (U+0000至U+001F)

任何字符都可以转义


这对我来说太棒了,太出乎意料了。但是为什么例如
\u0008
用于backspace而不用于删除以前的代码?@stacktracer::-)。如果这是一个严肃的问题,我想答案应该是没有任何东西强迫预处理器将该字符解释为删除前一个字符的命令。Eclipse的控制台也忽略了它。就像放一个\u000d实际上不会导致计算机的回车!这是C#更优雅地解决的问题,只允许对字符串、字符和标识符进行转义。这样,如果您不能键入非ASCII标识符,您仍然可以使用它们,但这样就不会有机会破坏源代码。不管怎样,预处理必须在编译器中完成。Java人显然没有从C中的三角图中学习,因为C中的三角图可能具有类似的破译代码属性。Mark,不,标识符仍然被限制为基本上都是Unicode字母的同一组字符(事实上与Java没有太大区别)。语法将字母字符定义为“Lu、Ll、Lt、Lm、Lo或Nl类的Unicode字符”或“表示Lu、Ll、Lt、Lm、Lo或Nl类字符的Unicode转义序列”。您还可以使用与关键字冲突的标识符,方法是使用Unicode转义或在标识符前面加上
@
(尽管这通常对代码生成器更有用)。@Joey:那么我在这里经历了什么?这是因为ideone使用单声道吗?我可以声明一个字段“/”,然后使用“/”进行反射访问。