4

我有一行像这样工作的代码,

mrq.setId((mrq.getId()+1));

但是,当我试图这样写时,

mrq.setId((mrq.getId()++));

它不起作用,错误是,Invalid argument ot the operation ++/--

其背后的技术原因是什么?

4

3 回答 3

4

增量运算符需要一个字段或变量。评估getId()不会产生 id 字段;它返回值getId()返回的副本(“副本”是指原始类型的文字副本和引用类型的新引用)。 getId()可能在return id;内部实现,但您不会取回 field id,而只会取回其值的副本。

最接近的等价物是int i = getId(); setId( getId() + 1 ); return i;,但是您要求很多允许getId()++作为此类表达式的语法糖。

于 2012-07-29T03:16:47.863 回答
3

x++本质上等同于x = x + 1,这在您的情况下没有意义:

mrq.getId() = mrq.getId() + 1
于 2012-07-29T03:12:00.260 回答
1

++运算符用于将变量的值增加 1。因此a++被视为a=a+1。这意味着使用它的操作数将是完成赋值的地方。

当您编写mrq.getId()++它时,它不会为您提供一个可以递增的操作数变量,因此这不起作用。

于 2012-07-29T08:52:49.703 回答