为什么当我在 ' ' 字符 + 数字中循环 \n 时它计数错误

Why when i loop a \n in an ' ' char + a number it counts wrong

好的,所以我有以下代码。我知道在 char 中换行没有意义,但我想知道的是为什么它从 10-19 而不是正常情况下的 1-10 打印。有人可以给我答案吗?

public class Demo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println('\n' + i);
        }
    }
}

\n 的 ASCII 值为 10。+ 运算符被解释为两个数值之间的 "add" 操作数,而不是两个数值之间的 "append" 操作两个字符串。这是因为您使用的是单引号,而不是双引号。单引号表示 char.

一个char可以当作Java中的实际数字。您可以检查 this chart.

上的所有 ASCII 值

JLS 4.10.1 - Subtyping Among Primitive Types pretty clearly displays that char is a subtype of int, if you're in to looking at the in-depth specifications. There's also JLS 5.1 - Kinds of Conversions 了解有关转化的详细信息。

根据下面 Tom Blodget 的评论,Java 似乎实际上将 UTF-16 用于字符串文字,详见 the String documentation and JLS 3。这可能是一个需要牢记的重要事实,尽管我已经成功使用 ASCII 值多年并且从未遇到过错误或任何类型的问题。

String 串联仅适用于 + 的两个操作数之一是 String 类型值的情况。在这种情况下,您有一个 char 和一个 int,没有 String 值。因此,您有整数加法。 Java 应用原始加宽转换将 char'\n' 转换为 int 值 10。然后您可以看到为什么它从 10 计数到 19。

如前所述,Java 将 '\n' 解释为 ASCII 字符,对应于整数值 10(十六进制值 0x0A)。

你能做什么:

System.out.println('\n' + Integer.toString(i));
System.out.println("" + '\n' + i);
System.out.printf("\n %i", i));
System.out.printf("\n" + i));

但是所有的想法都与同一个想法有关。