有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    obj.getValue()是方法返回的值。这不是一个变量。因此,不能应用任何更改操作数值的运算符(例如--、++、+=、=,等等)

    你可以使用:

    obj.setValue(obj.getValue()==0 ? 1 : obj.getValue() + 1);
    

    相反

    或者,可以将方法的返回值指定给变量,该变量可以递减:

    int a = obj.getValue();
    obj.setValue(a==0 ? 1 : ++a);
    

    但是,没有理由使用预减量(或后减量)运算符,除非以后要使用减量变量

  2. # 2 楼答案

    ++--运算符只能与可以出现在赋值(=)左侧的表达式一起使用。不能将函数调用放在赋值的左侧,因此不能将++应用于函数调用

    我所说的那种表达的正式术语是l-value。这是有效的:

    var x = 0;
    x++;
    

    因为x作为一个表达式是一个l值。这也适用于:

    var x = { a: 0 };
    x.a++;
    

    因为x.a也是一个有效的l值

    现在还应该指出,从技术上讲,是一种将函数调用用作l值的方法:

    var obj = {
      get value() { return this._value; },
      set value(newValue) {
        this._value = newValue;
      },
      _value: 0
    };
    
    var x = ++obj.value;
    

    因为value是用getter/setter对定义的,所以子表达式++obj.value将通过调用getter函数obj.value,递增返回值,然后调用setter函数来计算。当然,这并不能真正“反驳”一般规则,因为使用getter/setter函数的全部目的是允许简单的属性访问语法,同时涉及添加特殊语义的代码

  3. # 3 楼答案

    因为obj。getValue()是一个方法/函数

    不能自动递增函数的返回值(必须先将其分配给变量,自动递增将应用于该变量)

  4. # 4 楼答案

    正如其他答案所提到的,这是因为++--运算符不能应用于函数

    但是再看看你的代码,为什么要检查obj.getValue()==0

    如果值为0,则只需像任何其他数字一样递增

    obj.setValue(obj.getValue() + 1);

  5. # 5 楼答案

    为什么会出现这种情况?您可以获取一个默认值,然后添加一个

    obj.setValue((obj.getValue() || 0) + 1);
    
  6. # 6 楼答案

    不能使用++增加方法返回的“值”

    使用

    obj.getValue() + 1
    

    而不是

    ++obj.getValue()