当我在 println 中添加“\n”时,变量发生了变化

Variable is changed when I add "\n" in println

我是一名新 Java 学生,正在努力理解以下代码输出 11.7 而不是 1.7 会发生什么错误。为什么我用char版的时候代码变了,为什么还专门加了一个1?

public class FloatVersusDouble {

    public static void main(String[] args) {
        // FLOAT VS DOUBLE
        float num =1.7f;
        System.out.println(num + '\n');     
    }

}

谢谢

Variable is changed when I add "\n" in println

您没有添加 "\n",您添加的是 '\n'。前者是一个String,后者是一个char.

+的含义取决于types of the operands:

  • 当您将 +floatString 一起使用时,您正在进行 字符串连接 ,因为至少有一个操作数是 String;
  • 当您将 +floatchar 一起使用时,您正在进行 数字加法 ,因为这两个操作数有数字类型。

对于数字加法,两个操作数进行 binary numeric promotion,使它们兼容加法。由于两个操作数中“最宽”的是 float,因此 char 会升级为 float。由于 \n 的代码点值为 10,因此浮点值为 10.f。然后,将两个浮点数相加,得到 11.7f,打印为 11.7.

如果要打印 num 后跟换行符(后跟另一个换行符,因为您使用的是 System.out.println),请将 '\n' 更改为 "\n"

在 java 中,原始类型 char 在与数字运算符组合时被视为数字。 你在用代码做什么

num + '\n'

相当于伪代码

num + valueAsIntegerOf('\n')

\n是ascii值10,所以你在做

num + 10

如果你想打印数字和两个新行(一个是通过 println 方法添加的,你可以用不同的方式来完成:

// First solution add a second println
System.out.println(num);
System.out.println();

// Second solution convert num to a string and add \n to that string
System.out.println(String.valueOf(num) + '\n');

// Same as the second solution but using the automatic conversion to 
// string caused by "\n"
System.out.println(num + "\n");

最简单的方法是使用第三种解决方案。之所以可行,是因为您试图将运算符 + 数字和字符串结合起来。在这种情况下,数字更改为字符串,并与 \n

组合