下面是目前所遇到的情况,有待后续补充,也欢迎各位评论。
- 字符串变量没有初始化。
String str = null;
str.concat("你好");//字符串拼接,报错
- 接口类型的对象没有用具体的类初始化就去使用。
Map map;//直接使用map报错
Map map = new Map();//不报错
- 字符串和文字比较时,写法不对。同样是比较字符串str是否为a,第一种写法,如果str对象为null,必然不能调equals方法。所以推荐第二种写法。
str.equals(a);//str可能为null
"a".equals(str);
-
使用String.valueOf()方法代替toString()
当需要对象转为字符串时,请避免使用该对象的toString方法。如果你的对象的引用等于null,NullPointerException则会抛出,使用静态String.valueOf方法,该方法不会抛出任何异常并打印"null" -
返回null,方法的返回值不要定义成为一般的类型,而是用数组。这样如果想要返回null的时候就能避免许多不必要的NullPointerException
当一个对象的值为空,可以这样判:
String str = "";//值为空,存在对象的引用
String str = null;//不存在对象的引用
if (str != null && str != "") {
...
}
提一嘴:String类型在内存中的分配情况
对于通过new产生一个字符串(“Hello”)时,会先去常量池中查找是否已经有了”Hello”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”Hello”对象的拷贝对象。