这很奇怪.以下是代码:
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?
你正在执行字符串连接.st
is 的值"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"