System.out.println(symbol_b.symbolName + " " + symbol_b.pointsTo.size());
// change the fieldpointsTo set of all above symbols
for (int i = 0; i < samePointsTo.size(); i++)
{
for (int j = 0; j < samePointsTo.elementAt(i).size(); j++)
{
Symbol symbol = samePointsTo.elementAt(i).elementAt(j);
System.out.println(symbol.symbolName);
// if field information is already present
if (symbol.fieldPointsTo.containsKey(fieldObj))
{
symbol.fieldPointsTo.get(fieldObj).clear();
symbol.fieldPointsTo.get(fieldObj).addAll(symbol_b.pointsTo);
}
else
{
// we have to create field information
symbol.fieldPointsTo.put(fieldObj, symbol_b.pointsTo);
}
}
}
System.out.println(symbol_b.symbolName + " " + symbol_b.pointsTo.size());
在 for 循环之前, symbol_b.pointsTo 的大小为 2 ,但在 for循环之后其值从 2更改为0 。怎么会发生任何人都可以告诉我。我没有做任何做symbol_b.pointsTo和symbol_b.pointsTo是一个vetor。
答案 0 :(得分:3)
也许pointsTo不仅被变量名称引用,而且也是symbol.fieldPointsTo.get(fieldObj)返回的值,因此当你调用.clear()时,它会删除所有向量的元素?
答案 1 :(得分:1)
可能是这样的情况:
if (symbol.fieldPointsTo.containsKey(fieldObj))
{
symbol.fieldPointsTo.get(fieldObj).clear();
symbol.fieldPointsTo.get(fieldObj).addAll(symbol_b.pointsTo);
}
符号变量指向symbol_b
,symbol_b
不在fieldPointsTo
中,因此它会调用clear()
吗?