赋值的左侧必须是变量

时间:2011-08-21 22:04:19

标签: java list arraylist integer

为什么这不起作用?

private List<Integer> xShot = new ArrayList<Integer>();
     ...codes
     ...codes
     ...codes
     ...codes
     xShot.get(0) += 5;

无法理解为什么作业的左侧不是变量..

有人帮忙吗?

6 个答案:

答案 0 :(得分:4)

xShot.get(0)是一个返回值的方法调用。变量是您使用包含值的类型声明的内容,例如示例中的int x;String name;List<Integer> xShot。这些是Java中唯一可以使用assignment operator为其分配值的东西。

答案 1 :(得分:4)

虽然xShot.get(0)是一个数字,但它不是变量。您需要提供一个变量才能工作。那说

int i = xShot.get(0);
i += 5;

不行。 i将增加5,但位置5中的xShot对象不是同一个对象。您需要获取,修改和设置变量。

例如:

xShot.set(0, xShot.get(0) + 5);

答案 2 :(得分:2)

xShot.get(0) 返回一个对象;它不是变量,因此您无法分配它。

此外,Integer是不可变的(您无法更改其值),因此您必须使用 new 替换位置0上的对象 Integer具有计算值。

您可以像这样实现该行的目的:

xShot.set(0, xShot.get(0) + 5);

答案 3 :(得分:1)

就像在Java中说:

5 = 6; // "Assign 5 to 6"

左侧(5)不可变。

为什么这个示例语句是相关的?因为Java使用始终“按值传递”。这意味着方法的返回也是“按值返回”。 这是纯粹的数学:你不能改变一个值,你可以改变一个变量。 Java也一样。五个人永远不会变成六个人 换句话说:只能为变量分配值。

因此,正确的做法是:

xShot.set(0, xShot.get(0) + 5);

修改:在您的情况下:xShot.get(int)不会返回变量,而是返回值。

答案 4 :(得分:0)

赋值的左侧必须是显式变量,因为在你的语句中,表达式也可以是常量,如果允许则会出错

答案 5 :(得分:0)

如果您只想增加5并且不仅限于List<Integer>,那么您可以避免使用可疑的xShot.set(0, xShot.get(0) + 5)并执行此操作:

List<AtomicInteger> xShot = new ArrayList<AtomicInteger>();
xShot.get(0).addAndGet(5);

这会将xShot.get(0)AtomicInteger的值增加5,而不会更加轻松。