Java程序的未知行为

时间:2013-03-15 18:38:59

标签: java

    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。

2 个答案:

答案 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_bsymbol_b不在fieldPointsTo中,因此它会调用clear()吗?