Java中的按位操作未与print()中的字符串连接

时间:2018-12-04 05:34:40

标签: java printing bitwise-operators operator-precedence

此代码

func runOnRenderAnimations() -> Void {

    perform(#selector(animateIntroViews), with: NSNumber(value: 0), afterDelay: 0.5)
    perform(#selector(animateIntroViews), with: NSNumber(value: 1), afterDelay: 2.5)
}

@objc fileprivate func animateIntroViews(textPosition: NSNumber) -> Void {

    print(textPosition.intValue)
}

工作正常,但是这个

int a = 6;
System.out.print("The result is " + a*a);

产生一个异常:

  

线程“ main”中的异常java.lang.RuntimeException:无法编译   源代码-错误的树类型:at   pkg1.pkg4.take.input.TakingInput.main(TakingInput.java:11)​​

为什么呢?

当我试图一次打印几个按位运算的结果时,便出现了问题,就像这样:

int a = 6;
System.out.print("The result is " + a^a);

我查找了System.out.print(a&b + "\n" + a|b + "\n" + a^b); 方法的说明以及按位运算符的几个主题,并在SO上打印到控制台上,包括在撰写问题时的推荐主题,但是找不到答案。

1 个答案:

答案 0 :(得分:22)

这是因为+的{​​{3}}比^高,因此可以编译为:

("The result is " + a) ^ a

显然不起作用。在其周围加上括号:

System.out.print("The result is " + (a^a));

或者如Holger所述,您可以使用printf来解决此问题:

System.out.printf("The result is %d", a^a);