我的actionform中有一个属性是vipid,我从后台得到了vip会员表中的vipid,保存在list中,使用list.contains(vipid)的方法来验证提交的vipid是否存在于vip会员表中,可是就是一直返回false,哪里有问题呢?

解决方案 »

  1.   

    因为两个属性并非为同一个实例,在内存中驻留不同的空间。最简单的办法,就是写一个工具方法,遍历list,通过equals()方法进行判断boolean result = false;
    for (String str : list) {
        if (str.equals(vipid)) {
    result = true;
    break;
        }
    }
      

  2.   

    你传进去的是另外一个对象,不是你装进list那个对象
      

  3.   

    这个问题不一定是内存块的问题,经查ArrayList的contains方法:public boolean contains(Object elem) {
    return indexOf(elem) >= 0;
        }
     public int indexOf(Object elem) {
    if (elem == null) {
        for (int i = 0; i < size; i++)
    if (elementData[i]==null)
        return i;
    } else {
        for (int i = 0; i < size; i++)
    if (elem.equals(elementData[i]))
        return i;
    }
    return -1;
        }这里已经是调用.equals方法了,如果楼主放的都是String或者Integer应该是没问题的.看看是不是多了空格什么的.或者list.contains(vipid)写成了:list.contains("vipid");
      

  4.   

    多谢楼上的提醒,我发现了我的表单得到的vipid为string类型,而数据库中定义的类型为int,把类型转换下酒OK啦
      

  5.   

    我从后台得到了vip会员表中的vipid,保存在list中----------------------------------------------------
    为什么要这样做?我认为直接用用户输入的那个 vipid 去查数据库不就行了么?能找到就是存在,找不到就是不存在。另:就算要存放到集合中,也请不要存放在 List 中,应该存放在 HashSet 中。HashSet 的查询速度远远高于 List。