两个版本的“it.next()”+“it.nextIndex()”但顺序不同,为什么结果不同

时间:2016-03-13 00:37:57

标签: java iterator listiterator

我正在尝试学习ListIterator接口。我想出了两个版本的代码,

value: 11 index: 1
value: 22 index: 2
value: 33 index: 3
value: 44 index: 4

版本1的结果:

index: 0 value: 11
index: 1 value: 22
index: 2 value: 33
index: 3 value: 44

版本2的结果:

"John said, \"Well ain't that something.\""

我期待结果是一样的,但显然他们不是。有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:2)

首先调用it.next()时,it.nextIndex()将返回it.next()结果后元素的索引,因为it.next()将返回当前索引处的值,然后返回增加指数。

视觉示例:

it.next()首先:

      v
index 0  1  2  3
value 11 22 33 44

call it.next() -> returns 11, increments index by 1

         v
index 0  1  2  3
value 11 22 33 44

call it.nextIndex() -> returns 1

it.nextIndex()首先:

      v
index 0  1  2  3
value 11 22 33 44

call it.nextIndex() -> returns 0

      v   
index 0  1  2  3
value 11 22 33 44

call it.nextIndex() -> returns 11, increments index by 1

         v
index 0  1  2  3
value 11 22 33 44

答案 1 :(得分:1)

字符串连接表达式从左到右进行计算。这意味着

"value: " + it.next() + " index: " + it.nextIndex()

中调用nextIndex()后调用

next()

"index: " + it.nextIndex() + " value: " + it.next()

反之亦然。

由于next()移动了迭代器的位置,nextIndex()返回的值在两种情况下都不同。