public class Test2 { public static void main(String [] args){
System.out.println("3 + 6");
System.out.println(3 + 6);
System.out.println(3 + 6 + "buffer");
System.out.println("buffer" + 3 + 6);
System.out.println("buffer " + (3 + 6));
}
}
的输出
System.out.println(3 + 6 + "buffer");
是
9缓冲区
和
的输出System.out.println("buffer" + 3 + 6);
是
缓冲区36
为什么差异?为什么
System.out.println(3 + 6);
输出
9
?
答案 0 :(得分:3)
算术运算符从左到右解析。当你+
使用字符串时,它会附加为字符串。
System.out.println(3 + 6 + "buffer");
那就变成了
System.out.println( 9 + "buffer");
当你做的时候
System.out.println("buffer" + 3 + 6);
评估为
// "buffer3" + 6
// "buffer36"
和
System.out.println(3 + 6)
没有字符串连接。所以直接整数加法发生。
如果是
System.out.println("buffer " + (3 + 6));
您在3+6
添加了括号。由于优先级较高,括号中的表达式首先进行求值。因此,成为
System.out.println("buffer " + 9);
答案 1 :(得分:2)
传递给println
的表达式在传递之前进行评估。
从左到右评估它们。
如果表达式中的第一个(左)操作数是字符串,+
执行字符串连接,则"buffer" + 3 + 6
变为"buffer3" + 6
,变为"buffer36"
。
如果第一个和第二个操作数是数字,+
执行添加,3 + 6 + "buffer"
变为9 + "buffer"
,变为"9buffer"
。
如果某些操作数被括号括起来,则首先应用它们之间的运算符,因此"buffer " + (3 + 6)
等同于"buffer " + 9
。
答案 2 :(得分:2)
表达式正在评估从左到右的方向。
所以import AVFoundation
var backgroundMusicP: AVAudioPlayer!
func playBackgroundMusic(filename: String) {
let url = NSBundle.mainBundle().URLForResource(
filename, withExtension: nil)
if (url == nil) {
print("Could not find file: \(filename)")
return
}
var error: NSError?
do {
backgroundMusicP = try AVAudioPlayer(contentsOfURL: url!)
} catch {
backgroundMusicP == nil
}
if backgroundMusicP == nil {
print("Could not create audio player: \(error)")
return
}
backgroundMusicP.numberOfLoops = -1
backgroundMusicP.prepareToPlay()
backgroundMusicP.play()
}
在这一行中首先评估整数和System.out.println(3 + 6 + "buffer");
这里是第一种类型是字符串,并根据字符串类型在右边评估类型转换。
答案 3 :(得分:1)
首先从左到右评估您传递的表达式。这里是3 + 6 +"缓冲区"前两个参数是整数,因此+运算符将它们相加,sum为9,当它得到第三个参数" buffer"这是一个字符串,它将结果转换为字符串并打印出来。因此你得到字符串" 9buffer"结果。
然而在第二种情况下"缓冲区" + 3 + 6第一个参数是字符串,第二个参数是整数,所以第二个参数首先转换为字符串,然后+运算符连接它们。类似的情况是当它到达第三个操作符时它会"缓冲" +6并再次连接它,因此结果变为"缓冲区36"。
答案 4 :(得分:0)
如果您对String使用+符号,则java编译器将其视为连接并自动将toString
调用到其他对象。
因此,当您尝试打印3+6+"stuff"
时,它意味着int + int + contate to String,因此首先添加两个数字,然后将其转换为字符串并将其与"stuff".
连接
如果您致电"stuff"+3+6
,则会打印stuff36
答案 5 :(得分:0)
在程序运行的第一个(3 + 6 +“缓冲区”)中,java从左侧读取程序,因此将3和6视为整数,它们的总和为9,然后读取一个字符串,从而将其与字符串,结果为“ 9buffer”。 在第二个(“缓冲区” + 3 + 6)中,它首先读取字符串,因此将另一个与之连接 结果是buffer36。 在第三个(3 + 6)中,它们采用整数,因为在它们之前没有字符串 所以它给出9。