public User getUserByNameAndPw(String name,String password) {
// TODO Auto-generated method stub
Iterator it=list.iterator();
User user=null;
while(it.hasNext()){
User uu=(User)(it.next());
if(uu.getName().equals(name)&&uu.getPassword().equals(password))
user=uu;
}
return user;
}
public User getUserByNameAndPw(String name, String password) {
        Iterator it = list.iterator();
        while (it.hasNext()) {
            User uu = (User) it.next();
                        //不能用== ,用equals方法进行字符串值的比较
            if (name.equals(uu.getName())&&password.equals(uu.getPassword()))
                return uu;
        }
        return null;
    }
上面两端的实现方式不同,为什么用第一种不能执行,第二种就可以执行。而且第二种到底是啥意思啊?为什么在最后的return null 不会把原来的return uu,覆盖掉?还是另有大意?

解决方案 »

  1.   


    if(uu.getName().equals(name)&&uu.getPassword().equals(password))
    user=uu;兄弟这里满足 条件了 你跳出来吧,呵呵 可以 break 就ok了
      

  2.   

    第一种当然是不能执行的,按第一种的意思,只有在if为false的时候才有返回值(return),if为true的时候就没有返回值,这显然是不行的,因为函数是无论如何都要求有返回值的(User)
      

  3.   


    改成这样就ok了 if(uu.getName().equals(name)&&uu.getPassword().equals(password))
    user=uu;
    return user;
    }
    return null;
      

  4.   

    1.对于第一段代码,如果while里面不加return  user的话 按原来的程序 最后return 的是:a.it.next()指向的最后一个值(如果满足满足if条件) b.空值,如果不满足if条件
    2.对于if的判断条件,最好把不确定是否一定不为null的对象放在equals()里面,不然的话,如果被比较的对象不存在就会出现下面的情况:
    public class EqualsTest { public static void main(String args[]){
    String s = null;
    if(s.equals("s")){
    System.out.println("ok");
    }
    }
    }会报:NullPointerException 的异常,所以写成
    if (name.equals(uu.getName())&&password.equals(uu.getPassword()))
    更好