为什么我在这个程序中出错?
如果我将中间运算符更改为负数,就像这个(a++-++b)
一样,它正在执行而没有任何错误:
class Demo
{
public static void main(String []args){
int a=10;
int b=20;
System.out.println (a+++++b);
}
}
解析器无法看到您希望它看到的内容。你希望它看到
(a+++++b)
如
(a++ + ++b)
但是,解析器将其视为
(a++++ +b)
因此,它抛出一个编译错误,因为++运算符期望一个变量,但它得到的是一个值,这是一个值。
减法符号有效,因为它被标识为与添加系列不同的单独运算符。然而,增加似乎成为一串运营商。如果你只是在添加符号之间添加一个空格它应该工作正常,因为它将分别识别加法运算符..例如System.out.println(a ++ + ++ b);
public class Demo {
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a++ + ++b);
}
}
//输出 31
我想你可能想要这个,不要使用+++它在java中不是有效的运算符,BTW,你应该在下次发布更好的问题。
对于
(a++-++b);
解析器知道,int上没有+ - 或 - +运算符。所以它可以在(a ++ - ++ b)中分割表达式;
对于
(a+++++b);
这可以是(a + ++ ...或(a ++ + ...但是让我们首先看一个更简单的表达式:
int a = 100;
int b = 0;
-> int c=a+++b;
| Added variable c of type int with initial value 100
期望的结果是什么? a ++ + b或+ + + b?好吧,它被解释为c =(a ++)+ b;但它的风格很糟糕,因为你必须掌握运算符优先级的详细信息。
允许使用++++,还是++++?
-> ++++b;
| Error:
| unexpected type
| required: variable
| found: value
| ++++b;
| ^-^
-> a++++;
| Error:
| unexpected type
| required: variable
| found: value
| a++++;
| ^-^
不,为什么不呢?你可以说,它是(a ++)++;或++(++ b);但两者都包括两个步骤,递增1并返回一个值,所以
a=100
b=0
c=a++;
c=++b;
我们知道,c将变为100或1,在一种情况下,返回在递增之前执行(c = a ++),在另一种情况下(++ b)之后;
现在++++ b会发生什么?或++(++ b);什么回来了?
考虑到这一点,++++ b的唯一有效解释是++ + ++ b;没有+ ++ ++ b,也没有+ +++ + b。
和a ++ + ++ b;作品:
-> c=a++ + ++b;
| Variable c has been assigned the value 101
但是因为它很少使用,插入两个空格并不是一件大事,而且读者更友好,无论如何,我们应该忍受不一致,+++++被拒绝,而++ - ++ b是允许,这不会使后者成为一个很好的阅读表达。水平空间使代码也可以为人类更好地解析,这应该是您的主要关注点。
如果你想开车疯狂,请使用
c=a--- - --b;
因为有这个一元 - 这对于产生像-7这样的负值是很方便的。