string 中null和“”区别

在验证一个表单时,如果在服务器端验证提交过来的值,一般先通过request对象取值,然后验证,代码如下:

 

String val  =  request.getParameter( " val " );
   
if (val != "" ) {}
   
else {}


  如果这样写是没有问题的,但是如果写成 if(val!=null) 结果就出问题了,结果总是true。

问题:
""和null的区别是什么?
null表示没有引用任何对象,那""呢是是堆中的对象。

对此问题我编写了一段简单的代码进行了判断:

 

public   class  TestNull {
  
static  String s;
  
public   static   void  main(String args[]) {
     String s1
= null ;
     String s2
= "" ;
     String s3 
=   new  String( "" );

     System.out.println(
" s: " + s);
     System.out.println(
" s1: " + s1);
     System.out.println(
" s2: " + s2);
     System.out.println(
" s1==s: " + (s1 == s));
     System.out.println(
" s1==s2: " + (s1 == s2));
     System.out.println(
" s2==\ " \ " : " + (s2 == "" ));
     System.out.println(
" s3==s2: " + (s2 == s3));
     System.out.println(
" s2.equals(s1): " + s2.equals(s1));
     System.out.println(
" s2.equals(s3): " + s2.equals(s3)); 
     System.out.println(s1.equals(s2));   
// throw  java.lang.NullPointerException
   }
 
}


结果:
s:null
s1:null
s2:
s1==s:true
s1==s2:false
s2=="":true
s3==s2:false
s2.equals(s1):false
s2.equals(s3):true
Exception in thread "main" java.lang.NullPointerException
        at TestNull.main(TestNull.java:17)

在这里我们可以很清楚的看到""和null的区别了。
""的确是不同于null的,从""可以使用equals()方法我们可以清楚的认识到""是一个堆中值。


 

posted @ 2009-05-06 16:59  四月的雨  阅读(456)  评论(0编辑  收藏  举报