当我尝试在/减量中写一个后缀/前缀,然后在/减量中写一个帖子/前缀时,我收到以下错误:操作的无效参数++ / - 。< / p>
但是,根据JLS:
PostIncrementExpression:
PostfixExpression ++
和
PostfixExpression:
Primary
ExpressionName
PostIncrementExpression
PostDecrementExpression
所以写道:
PostfixExpression ++ ++
应该可以......有什么想法吗?
答案 0 :(得分:23)
请注意,原始语法缺少任何语义。它只是语法,并不是每个语法上有效的程序通常都是有效的。例如,在使用之前必须声明变量的要求通常不包含在语法中(您可以,但这很麻烦)。
Postfix-increment产生一个rvalue - 就像你不能使用postfix-increment文字一样,你不能后缀增加i++
的结果。
引自JLS(3 rd ed。,第486页):
后缀增量表达式的结果不是变量,而是值。
答案 1 :(得分:8)
错误告诉你答案:
unexpected type
required: variable
found : value
(i++)++;
因此,当运算符需要变量时,i ++会计算出一个值。
答案 2 :(得分:5)
您只能将++
或--
应用于表示可修改位置(左值)的表达式。 ++
或--
的结果是来自位置的值(rvalue - 在增量或减量之前或之后),而不是自身可修改的位置。所以你不能说(a++)++
只能说(a+b)++
- 没有地方可以修改。
答案 3 :(得分:4)
这个表达式的问题 i =(i ++)++; 是(i ++)被解析为一个值,而 ++ 运算符的定义是这样的 1。它将增加指定的变量,无论您使用Postfix还是Prefix,都会为此返回/返回一个值。 2. 此运算符需要变量,无论是前缀还是后缀。但是这里发生的是(i ++)返回一个值并用它代替(i ++)然后你有(值)++ 和(值)是不是此运算符的预期类型,因为它需要一个变量来代替值。
例如在Java中,如果您编译以下代码段,则会收到错误,如代码段后所示:
公共类A { public void test(){ int i = 0; i =(i ++)++; } }
编译输出:
A.java:4:意外类型 必需:变量 发现:价值 i =(i ++)++; ^ 1错误
答案 4 :(得分:2)
i ++基本上是以下的捷径:
(i = i + 1)
写下来没有任何意义:
(i = i + 1)++;
正确? :)
答案 5 :(得分:1)
这种手术的结果应该是什么? i++
的结果是i
的当前值(的副本),之后{{em> post )会增加i
。那你怎么想象再次增加i++
的结果呢?如果i
原来是1,那么它的值应该在i++++
之后,该操作的结果应该是什么?
如果您考虑一下,您可能会意识到,非常很难正确地定义它。由于Java的设计者打算避免使用C / C ++“未定义”的陷阱(并且因为这样的语句的值最多可疑),他们可能决定明确禁止它。
答案 6 :(得分:1)
必须记住:增量&amp;减量(前缀和后缀)运算符始终使用 变量 而非 值
我在这里用一个exe来解释这个:
int i = 0;
int j = (i++)++;
以上exe。
使用0(零)
初始化 i 的值(i ++)&#39; ++&#39;与i合作,这是可变的&amp;执行操作后返回(1)
现在在(1)++ &#39; ++&#39;使用(1),这是一个与java规则相反的值的变量,这就是为什么编译时错误生成操作的无效参数++ / -
答案 7 :(得分:0)
你想通过(i ++)++实现什么?
增加两次!!
使用循环
循环中的增量:)
答案 8 :(得分:0)
在i ++中,++是一个后缀运算符,因此它返回i的值然后递增它。你想要(i ++)++做什么?从(i ++ == i)开始它应该返回i + 1吗?如果不是那就不奇怪我+ = i但是(i ++)++!= i)考虑以下表达式:
i++ == i; // true
j = i++ // j gets the value of i
j++ == i // still true since j== i
(i++) ++ == j ++ // what should be the answer here?
您是否考虑过i + = 2?
答案 9 :(得分:0)
为什么不使用简写增量运算符?
i+=2
有