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()方法我们可以清楚的认识到""是一个堆中值。
浙公网安备 33010602011771号