这个是helloapp中的表单验证中的一个程序片断: 
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)   
{           ActionErrors=new ActionErrors();   
            if((userName==null)||(userName.length()   <1))   
              errors.add("username",new ActionMessage("hello.no.username.error"));   
            reyurn errors;   
}   
if((userName==null)||(userName.length()<1))这个判断方法里面的两项不是一样的吗? 什么情况下会出现null的情况啊?既然为null那肯定是length<1了,还用加后面的吗?郁闷中

解决方案 »

  1.   

    后面那个其实相当于userName.equals("")
    空字符串和null是不一样的
      

  2.   

    第一个为0,第二个为false
    String str1 = "";
    System.out.println(str1.length());
    System.out.println(str1==null);
      

  3.   

    我知道是不一样,就是为什么要这么搭配?什么情况下产生null?
      

  4.   

    userName==null是保证存在,userName.length()<1是保证名字至少有字符,不能是空的。null的时候内存中是没有地址分配给这个字符串的,而不为null,然后又要保证分配了空间,并且又赋值了。
      

  5.   

    null  可能是内存为空 或者是值为空 前一个是判断是否内存为空 就是内存中到底有没有那个东东 后一个是看值是否存在 而且 如果 你把他们两个的位置换一下 当内存为空的时候就会给你一个NullPointException了 可以自己试验一下
      

  6.   

    null我知道是值为空,知道是没分给内存空间,请你们回答问题时一定要回答到点上!!!!!!!!!
      

  7.   

    什么时候会是内存为空呢?当按下submit的时候,会是哪种情况?是内存为空还是内存里有空字符串?
      

  8.   

    一般情况下判断非空都会这么写,已经成一种惯例了, 呵呵
    一定要追根究底的话, 其实只要页面有<input type="text" name="username" value="">之类的元素,那么获取到的userName就不会为null
    所以只要你确信提交的页面username是文本框, 那么你可以只写if(userName.length()<1)有些元素如单选框, 下接框, 在没有选中的情况下, 获取到的值会是null
    另外一种情况用链接直接调用Action(而不是提交),有可能出现null: 如你的Action为hello.do, 页面有一个链接为<a href="hello.do">test</a>, 如果你不写userName==null这个判断条件, 就会报空指针异常, 写了就会有提示信息
    如果是自己写的页面自己写的类,当然不会出现这种情况,但你写的类别人可能也会调用,那么情况就不是你所能控制的了
      

  9.   

    当按下submit的时候,会是哪种情况?是内存为空还是内存里有空字符串?  当按下submit的时候, 如果username是文本框, 那么就是空字符串