为什么\ u000a是一个坏人?

dai*_*isy 2 java

我正在尝试从十六进制初始化一个字符串:

import java.io.*;

public class a {
    public static void main (String[] args)
    {
        try {
            PrintWriter w = new PrintWriter("something"); 
            w.println("\u0061\u0062\u000a");
            w.close(); 
        } catch (Exception e) {};
    }
}
Run Code Online (Sandbox Code Playgroud)

但看起来像"\ u000a"是一个badchar,它一直告诉我未封闭的字符串文字?

a.java:8: error: unclosed string literal
            w.println("\u0061\u0062\u000a");
Run Code Online (Sandbox Code Playgroud)

知道它有什么问题吗?

运行:

%> java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Hen*_*nry 5

\u是Java 如何处理的结果.即使在tokenizer识别字符串文字之前,这些unicode转义也会在编译的早期处理.

因此,代码段相当于:

w.println("ab
");
Run Code Online (Sandbox Code Playgroud)

这显然是不正确的.

修复使用\n而不是\u000a.