今天在leetcode上遇到了这样一个问题,这个错也是头一次碰到,故总结如下。
如我们所知,ArrayList不能像数组一样用下标来访问内部元素,通常我们的做法是用get()方法做平替,但是二者其实并不是等价的,我们上述出现的问题就是由此导致。
错误的代码:
//res是一个二维ArrayList
res.get(i).get(left) = res.get(i).get(right);
报出的错误原因:
required: variable
found: value
他的意思是,这里需要一个“变量”,但在该位置却找到了一个“值”,所以赋值操作无法完成。
对此我的理解是,get方法返回的是该对象的引用,这个引用本质上就是一个地址,我们可以通过这个地址来获取这个对象,使用它的方法,但是我们不能对这个引用做“再赋值” , 所以这个返回值我们只能让其作为右值,而不能是左值
所以说,通过get()方法来给集合元素赋值是不正确的!!
上面搞清楚了问题的原因,下面来看解决方法:
list接口中其实还有一个set( index,element ) 方法,用来设置或更新容器内index位置上的元素值,其中index是int类型,element是list实例化的时候自定义的类型
综上,对我们出错的代码做如下修改问题就解决了:
res.get(i).set(left , res.get(i).get(right) );
有说的不对的地方还请大家指正。祝好!