当我在println中添加"n"时变量发生了变化



我是一名新的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');     
}
}

感谢

当我添加"n"在println

加的不是"n",而是'n'。前者为String,后者为char

+的含义取决于操作数的类型:

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

对于数字加法,两个操作数进行二进制数字提升,使它们能够兼容加法。自"最宽"以来两个操作数中有一个是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

组合

最新更新