为什么当我在 ' ' 字符 + 数字中循环 \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));
但是所有的想法都与同一个想法有关。
好的,所以我有以下代码。我知道在 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.
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));
但是所有的想法都与同一个想法有关。