(浮点值+整数值+长值)如何产生意外结果?

时间:2017-05-05 09:27:15

标签: java

import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Float f=new Float(3.1);
                Integer i=new Integer(1);
                long l=2;
                System.out.println("Result is "+l+f+i);
    }
}

输出:Result is 23.11

我在某处看到了上面的代码。我试图找到这种意外输出背后的原因,但没有成功。请提供一些链接或参考或解释。

其他信息: System.out.println(l+f+i+" is Result");提供6.1 is Result。这意味着字符串和数字的顺序对输出有影响。

4 个答案:

答案 0 :(得分:4)

这是String串联,

System.out.println("Result is "+l+f+i);

给予

System.out.println("Result is "+"2"+"3.1"+"1");

更好地对算术运算进行分组:

System.out.println("Result is "+(l+f+i));

您可以在此处找到更多详细信息:String Concatenation Operator +

答案 1 :(得分:1)

您没有添加号码,而是打印它们,因为将对象放在System.out.println中时的默认操作是调用他的toString()方法。所以你要打印l.toString() + f.toString() + i.toString()

如果要显示总和,则必须使用:

Float f=new Float(3.1);
Integer i=new Integer(1);
long l=2;
System.out.println("Result is "+ (l+f+i));

答案 2 :(得分:1)

将String与任何数字基元或对象连接,使用toString()方法将它们转换为String:

System.out.println("Result is "+l+f+i); 

要在字符串连接之前执行计算,您应该将计算表达式放在括号之间:

 System.out.println("Result is " + (l+f+i)); 

答案 3 :(得分:1)

在此处为其他答案添加重点:

每当进行字符串连接时,都会为连接中的每个元素调用let songList =  [“cat”, “dog”, “elephant”] let sateOfNewSongArray = [false, true, false] let selectedSongList = [String]() for (index, element) in self.sateOfNewSongArray.enumerated() { if element { if let animalName:String = songList[index] { selectedSongList.append(animalName) } } } print(“selectedSongList - \(selectedSongList)”) 方法。因此,要连接的元素是

toString()

对于原语,Autoboxing会首先将它们转换为Wrapper类,并且每个类的"Result is ", l, f, and i 方法都会被调用,这就是发生的事情。