当前位置: 首页 > 面试题库 >

为什么后递增运算符不能在返回int的方法上工作?

赵正雅
2023-03-14
问题内容
public void increment(){
    int zero = 0;

    int oneA = zero++; // Compiles

    int oneB = 0++; // Doesn't compile

    int oneC = getInt()++; // Doesn't compile
}

private int getInt(){
    return 0;
}

它们都是int的,为什么B&C不能编译?与++运算符的区别方式有关= 0 + 1;吗?

无效的操作参数++ /-


问题答案:

i++是对变量的赋值i

就您而言,zero++等于zero = zero + 1。因此,这0++也意味着0 = 0 + 1没有意义getInt() = getInt() + 1

更精确地 :

int oneA = zero++;

手段

int oneA = zero;
zero = zero + 1; // OK, oneA == 0, zero == 1
int oneB = 0++;

手段

int oneB = 0;
0 = 0 + 1; // wrong, can't assign value to a value.
int oneC = getInt()++;

手段

int oneC = getInt();
getInt() = getInt() + 1; // wrong, can't assign value to a method return value.

从更一般的角度来看,变量是 L值 ,表示它是指内存位置,因此可以分配。 L 值中的 L 代表赋值运算符(即)的
左侧=,即使可以在赋值运算符的左侧或右侧找到L值(x = y例如)。

相反的是 R值R 代表赋值运算符的 右侧
)。R值只能在赋值语句的右侧使用,以将某物分配给L值。通常,R值是文字(数字,字符串…)和方法。



 类似资料:
  • 代码 产出(如预期) 1.post increment运算符()在表中具有最高的优先级。因此它肯定会在赋值运算符()之前执行。根据post增量规则,变量的值只有在执行该语句之后才会增加。 参见有rvalue 3,而不是变量本身,对吗?但是如果它带来了一个具有lvalue的变量,那么5将插入其中,在语句结束后,它的值将是6。这有什么问题,为什么做不到?

  • 考虑以下代码: 这会产生编译错误,因为添加2字节的结果是Int。 为了解决这个问题,我需要手动将结果转换回字节: 这是非常反直觉的。为什么算术运算符是这样工作的?

  • 这个问题基本上是说迭代一个整数,然后计算这个数是否可以被它的左边数整除,如果它可以整除,则返回一个布尔数组。 73312 第一个数字没有左边的数字,所以它是假的 我运行了测试,一切都很好,但是有了这个数字(73312),当它应该返回false时,它会返回true。 预期输出 实际输出

  • 我使用的是我的代码中有两个可观察的对象 观察值不是来自请求,而是来自 我需要根据这个逻辑将序列组合/转换成一个单一的可观察值: 如果序列,或,-需要返回新的可观察的否则需要返回 我试图使用来实现: 但问题是我的

  • 问题内容: Go 包中的大多数输出​​方法都会返回,例如的方法和函数。但是,一些输出方法(例如的方法)会返回。这使得不方便实现在以下方面或不存储的中间值,并输入从将其转换到。这种差异的原因是什么? 问题答案: 复制的数据可能超过int32字节。 使用和接口,数据量受给定切片的大小限制,该切片的长度受当前体系结构的限制。

  • 问题内容: 我在网站上进行了很多搜索,但未找到任何相关问题。因此,我相信这不是重复的。 我知道我们可以用3种方式初始化数组: 第一个问题是:一种东西叫什么名字?它称为数组文字吗? 第二个问题是:with和有什么区别? 第三个问题是:为什么我不能用返回一个新创建的数组?我得回去。 第四个问题:和都是数组的构造函数,对吗? 问题答案: 在声明中: 该数组称为 数组初始化器 。它描述在Java语言规范的