【问题标题】:Java for-loop and compile error due to wrong datatype由于错误的数据类型,Java for-loop 和编译错误
【发布时间】:2015-01-24 15:19:32
【问题描述】:
今天我在Java中使用for循环时有一个奇怪的经历,我真的无法解释。这是我的代码 sn-p:
List<String[]> list;
....
for (String[] tmp : list.get(0)) {
...
}
这段代码 sn-p 没有编译,因为 list.get(0) 返回一个 String 而不是 Strings 的数组。但为什么呢?
【问题讨论】:
标签:
java
arrays
list
compiler-errors
iterator
【解决方案1】:
list.get(0) 返回一个由Strings 组成的数组,因此当您对其进行迭代时,您将获得单独的字符串:
for (String tmp : list.get(0)) {
...
}
如果遍历整个列表,每次迭代都会得到一个 String 数组:
for (String[] tmp : list) {
...
}
【解决方案2】:
尝试遍历字符串数组
for (String[] tmp : list) {
...
}
或遍历第一个数组的字符串
for (String tmp : list.get(0)) {
...
}
【解决方案3】:
for (String[] tmp : list.get(0))
应该是
for (String tmp : list.get(0))
因为list.get(0) 是字符串数组,而不是字符串数组。
【解决方案4】:
实际上,list.get(0) 并没有像您期望的那样返回 String 而是 String[]。 List<String[]> list 是 List 的 String[]。 list.get(0) 因此是String[]。问题在于您的循环变量。如果你循环一个String[],那么在循环期间保存单个元素的循环变量的类型就是String。
应该是:
List<String[]> list;
// ...
for (String el : list.get(0)) {
// ...
}
【解决方案5】:
当您调用 list.get(0) 时,它会返回一个字符串数组。如果我扩展您的代码,它将如下所示,
String[] strArr = list.get(0);
....
for (String[] tmp : strArr) { //compilation issue
...
}
显然这是错误的,因为 strArr 中的每个对象都是字符串,而不是字符串数组。