我有一行像这样工作的代码,
mrq.setId((mrq.getId()+1));
但是,当我试图这样写时,
mrq.setId((mrq.getId()++));
它不起作用,错误是,Invalid argument ot the operation ++/--
其背后的技术原因是什么?
增量运算符需要一个字段或变量。评估getId()不会产生 id 字段;它返回值getId()返回的副本(“副本”是指原始类型的文字副本和引用类型的新引用)。 getId()可能在return id;内部实现,但您不会取回 field id,而只会取回其值的副本。
最接近的等价物是int i = getId(); setId( getId() + 1 ); return i;,但是您要求很多允许getId()++作为此类表达式的语法糖。
x++本质上等同于x = x + 1,这在您的情况下没有意义:
mrq.getId() = mrq.getId() + 1
++运算符用于将变量的值增加 1。因此a++被视为a=a+1。这意味着使用它的操作数将是完成赋值的地方。
当您编写mrq.getId()++它时,它不会为您提供一个可以递增的操作数变量,因此这不起作用。