这很奇怪。以下是代码:
public static void main(String [] args) {
double db = 56.00;
String st = String.valueOf(db);
System.out.print(st+3);
}
我得到的输出是
56.03
首先,如何添加一个int?第二,56.00 + 3是如何可能的56.03?
答案 0 :(得分:12)
您正在执行字符串连接。 st
的值为"56.0"
,然后您正在执行该int
3的连接,结果为"56.03"
。
JLS 15.18.1中描述了字符串连接+
运算符。它始于:
如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换(第5.1.11节)以在运行时生成字符串。
JLS 5.1.11包括:
基本类型T的值x首先转换为引用值,就好像将它作为参数提供给适当的类实例创建表达式(第15.9节):
[...]如果
T
为byte
,short
或int
,则使用new Integer(x)
。[...]否则,转换的执行就好像通过调用没有参数的引用对象的
toString
方法一样;但如果调用toString
方法的结果为null
,则会改为使用字符串"null"
。
换句话说,在这种情况下你的程序基本上是:
double db = 56.00;
String st = String.valueOf(db); // "56.0"
System.out.print(st + new Integer(3).toString()); // "56.0" + "3" = "56.03"