我有个问题。为什么下面的代码由于变量冲突而不能用eclipse运行?
PdfPTable testObj1 = new PdfPTable(6);
PdfPTable testObj1 = new PdfPTable(6);
但是如果我将HashMap与循环一起使用,它将起作用:
Map<String, PdfPTable> hash = new HashMap<>();
for (i = 1; i <= 1; i++){
hash.put("testObj" + String.valueOf(i), new PdfPTable(6));
hash.put("testObj" + String.valueOf(i), new PdfPTable(6));
}
有人可以向我解释为什么可以运行底层示例吗?提前致谢。
最佳答案
在第一种情况下,您将在编译时使用特定的变量名称创建变量。因此,如果在相同范围内有两个具有相同名称的变量,则编译器将引发错误。
在第二种情况下,您实际上是使用字符串作为HashMap的键。在HashMap中使用相同的键会导致覆盖为此键存储的旧值。即使这样,这里也与变量名无关。
除了第二个示例,您还可以编写
Map<String, PdfPTable> hash = new HashMap<>();
hash.put("testObj1", new PdfPTable(6));
hash.put("testObj1", new PdfPTable(6));
这应该表明您实际上正在用新的第二个实例覆盖
PdfPTable
的第一个实例。