在 Java 中的 int 数组中使用单引号打印 space 时出现问题

Issue with printing space with single quotes in a int array in Java

我想以特定格式打印我的 int[](在每个数字之间的 space 内,等等)

但是我发现 Java 没有打印单引号中的空格,它甚至改变了我在 int[] 中的数字。 bracket 字符也发生了同样的事情。

例如:

    int[] test = {1,2,3,4,5};

    System.out.println('(' + test[0]+ ' ' +test[1] + ' ' + test[2] + ' ' 
            +test[3] + ' ' + test[4] + ')');

    //224

    System.out.println("(" + test[0]+ " " +test[1] + " " + test[2] + " " 
            +test[3] + " " + test[4] + ")");

    //(1 2 3 4 5)

我认为 spacebracket 是字符,我想知道为什么我需要使用 double quotes 来正确打印它们以及为什么 single quotesspace 字符会改变输出?

谢谢!

原因是,字符基本上存储为数字。当您将字符与其他数字相加时,您将收到一个数字作为结果。

// Prints 97
System.out.println('a' + 0);

字符不会作为数字添加的唯一情况是将它们添加到字符串中。

System.out.println("Letter" + 'a');

在上面的代码中,您只将数字和字符相加,因此您得到一个数字作为输出。 Java 从左到右添加内容,因此通过将 first-appearing 字符更改为字符串,您应该得到所需的输出。

// Fixed version
System.out.println("(" + test[0]+ ' ' +test[1] + ' ' + test[2] + ' ' 
        +test[3] + ' ' + test[4] + ')');

Java单引号表示char类型,double-quote表示String类型。所以你的第一行是试图打印这些字符的值。有关重载方法,请参阅此处 https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println()

带撇号的引号是 char 文字。 char 是一个数字基元,可以添加到其他数字基元,如 int.

+运算符也被重载以实现字符串连接。如果运算符的任一侧是 String,则 + 运算符是字符串连接运算符,否则它是数字加运算符。

因此,'A' + 5表示将字符A的数值加5,而"A" + 5表示将字符串A与数字[的字符串表示形式连接起来=21=].

在您的情况下,将第一个字符更改为 String 文字就足够了。所有剩余的 + 运算符将成为字符串连接运算符:

System.out.println("(" + test[0] + ' ' + test[1] + ' ' + test[2] + ' ' 
        + test[3] + ' ' + test[4] + ')');

//(1 2 3 4 5)