我是一名新的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
。
+
的含义取决于操作数的类型:
- 当您将
+
与float
和String
一起使用时,您正在执行字符串连接,因为至少有一个操作数是String
; - 当您将
+
与float
和char
一起使用时,您正在执行数字加法,因为两个操作数都具有数字类型。
对于数字加法,两个操作数进行二进制数字提升,使它们能够兼容加法。自"最宽"以来两个操作数中有一个是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
组合