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
。这意味着字符串和数字的顺序对输出有影响。
答案 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
方法都会被调用,这就是发生的事情。