(a +++++ b)不起作用,而(a ++ - ++ b)起作用

问题描述 投票:-3回答:4

为什么我在这个程序中出错?

如果我将中间运算符更改为负数,就像这个(a++-++b)一样,它正在执行而没有任何错误:

class Demo
{  
    public static void main(String []args){

        int a=10;
        int b=20;

        System.out.println (a+++++b);

     }
}
java prefix postfix
4个回答
1
投票

解析器无法看到您希望它看到的内容。你希望它看到

(a+++++b)

(a++ + ++b)

但是,解析器将其视为

(a++++ +b)

因此,它抛出一个编译错误,因为++运算符期望一个变量,但它得到的是一个值,这是一个值。


0
投票

减法符号有效,因为它被标识为与添加系列不同的单独运算符。然而,增加似乎成为一串运营商。如果你只是在添加符号之间添加一个空格它应该工作正常,因为它将分别识别加法运算符..例如System.out.println(a ++ + ++ b);


0
投票
public class Demo {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a++ + ++b);
    }
}

//输出 31

我想你可能想要这个,不要使用+++它在java中不是有效的运算符,BTW,你应该在下次发布更好的问题。


0
投票

对于

(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这样的负值是很方便的。

© www.soinside.com 2019 - 2024. All rights reserved.