我转换为String的double加上int类型

时间:2016-04-03 20:20:48

标签: java string

这很奇怪。以下是代码:

 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?

1 个答案:

答案 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节):

     

[...]如果Tbyteshortint,则使用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"