0
    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 是一个投票者。

4

2 回答 2

3

也许 pointsTo 不仅由该变量名称引用,而且还是 symbol.fieldPointsTo.get(fieldObj) 返回的值,因此当您对其调用 .clear() 时,它会删除所有向量的元素?

于 2013-03-15T18:45:13.370 回答
1

会不会是这样:

if (symbol.fieldPointsTo.containsKey(fieldObj)) 
{
    symbol.fieldPointsTo.get(fieldObj).clear();
    symbol.fieldPointsTo.get(fieldObj).addAll(symbol_b.pointsTo);
}

符号变量指向的symbol_bsymbol_b是不是在fieldPointsTo所以它调用clear()它呢?

于 2013-03-15T18:46:10.150 回答