- 两者的区别与 “数字0和没有不是同一种概念”是一个道理。
null是空对象,
""是空字符串
- null可以赋值给任何对象,而""就不行了,只能赋值给字符串对象
String s=null;//定义了一个对象实例s,但未将该实例指向任何内存空间
String s="";//定义了一个对象实例s,指向了一个空串
/**
*分析null和“”的区别,从内存,比较方法==和equals(),空指针异常来分析
*
*/
- String str1 = null; str引用为空
String str2 = ""; str引用一个空串
- 也就是null没有分配空间,""分配了空间,因为str1还不是一个实例化的对象,而str2已经实例化。
因为null不是对象,""是对象。
所以比较的时候必须是 if(str1==null){...}和if(str2.equals("")){...}。
对象用equals比较,null用等号比较。因此,如果str1=null;
下面的写法错误:
if(str1.equals("")||str1==null){
}
正确的写法是
if(str1==null||str1.equals("")){ }//先判断是不是对象,如果是,再判断是不是空字符
String aaa = null;
String bbb = "";
然后调用String的方法比如说
aaa.indexOf("a");
bbb.indexOf("a");
这样的话,字符串aaa在调用indexOf的时候会报空指针异常,而bbb则不会。因为aaa在堆内存中不存在,无法调用方 法,而bbb是存在的。
- 1,就像一个残疾人,虽然他是残疾的,
但是他还是可以调用他的方法,他可以吃饭,
但是如果这个人都不存在了,吃饭更无法执行了。
2,打个比方:一个空玻璃杯,不能说它里面什么都没有,因为里面有空气,当然也可以把它弄成真空,null与" "的区别就象真空与空气一样。