Java中String为空字符串和null的判断方法
Java空字符串与null的区别
1.类型
- null表示的是一个对象的植,而不是一个字符串。如声明一个对象的引用,String a=null;
- ""表示一个空的字符串,就是说它的长度为0。如声明一个空字符串,String a = “”;
2.内存分配
- String a=null;表示声明一个字符串对象的引用,但是指向null,就是说还没有分配指向任何内存空间。
- String a = “”;表示声明一个字符串类型的引用,它的值为""空字符串,这个a引用指向是空字符串的内存空间。
- String str = new String(“abc”);等于号左边的存放在栈(stack)中,右边的存放在堆(heap)中。
一、示例1.0
String str = null;
String strAgain = "";
//str等于null时等于true
System.out.println("str和null的比较结果为:" + (str == null));
//空指针异常 java.lang.NullPointerException
System.out.println("str的isEmpty()方法:" + (str.isEmpty()));
//空指针异常 java.lang.NullPointerException
System.out.println("str的length()方法:" + (str.length()));
//空指针异常 java.lang.NullPointerException
System.out.println("str和nullequals的比较结果为:" + (str.equals(null)));
//----------------------------------------------------------------------
//strAgain == null 为false
System.out.println("strAgain和null的==比较结果为:" + (strAgain == null));
//strAgain == "" 为true
System.out.println("strAgain和“”的==比较结果为:" + (strAgain == ""));
//strAgain.isEmpty() 为true
System.out.println("strAgain的isEmpty()方法:" + (strAgain.isEmpty()))
//strAgain.equals(null) 为true
System.out.println("strAgain和null的equals方法比较结果为:" + (strAgain.equals(null)))
二、示例2.0
String strOne = new String();
String strTow = null;
String strThree = "";
//----------------------------------------------------------------
System.out.println(strOne == strTow); //比较内存地址,返回false;
System.out.println(strOne.equals(strTow)); //值的比较,返回false;
System.out.println(strTow == strThree); //比较内存地址,返回false;
System.out.println(strTow == strThree); //值得比较,返回false;
System.out.println(strOne = strThree); //比较内存地址,放回false;
System.out.println(strOne.equals(strThree)); //值得比较,放回true
三、比较结论3.0
通过上面的两个例子,可以得出结论:
1.如果想调用一个方法,首先要有一个对象,但是null并不是一个对象,内存中没有他的空间,所以null是不能够调用String中方法的,isEmpty、length和equals方法都不能够调用。
2.字符串对象和null的值不同,而且内存地址也不同。
3.空字符串对象和null的值不同,而且内存地址也不一样。
4.new Sting()创建一个字符串对象的默认值为""(String类型成员变量的初始值为null)
四、java判断空字符串为空的方法
方法1
最多人使用,直观、方便,但是效率低
if(s == null || s.equals("")){...}
方法2
比较字符串长度,效率高
if(s == null || s.length() == 0){...}
方法3
Java SE6.0 开始的提供的方法,效率高,但是兼容性不好。
if(s == null || s.length() == 0){...}
方法4
更加直观、简便的方法,效率高
if(s == null || s == ""){...}
注意:s==null有必要存在
如果String类型为null,而去进行equals(String) 或者 length() 等操作时会抛出java.lang.NullPointerException异常。
并且s==null的顺序必须出现的前面,不然同样会抛出java.lang.NullPointerException异常。
五、StringUtils运用
- isEmpty:判断某个字符是否为空,为空的标准时str==null或者str.length()==0
public static boolean isEmpty(CharSequence cs){
return cs == null || cs.length() == 0;
}
- isBank:判断某个字符是否为空或者长度为0或者由空白字符(whitespace)构成
public static boolean isBlank(CharSequence cs) {
int strLen;
if (cs != null && (strLen = cs.Length() != 0)) {
for (int i = 0; i < strLen; ++i) {
if (!CharSequence.isWhitespace(cs.charAt(i))) {
return false;
}
}
}
}
- trim:去掉字符串两端多余的空格
public static String trim(String str) {
return str == null ? null : str.trim();
}
- stripStart:去掉字符串前指定的字符内容
StringUtils.stripStart("startFlash", "start"); //Flash
- substring:截取指定位置的字符串
public static String substring (String str, int start)
- split:分割指定字符串
public static String[] split(String str, String separatorChars)
- join:将数组或者集合以某个拼接符拼接到一起,形成一个新的字符创
public static String join(Object [] obj, String separator)
- replace:将指定字符串的某个字符串修改成另一个值
public static String replace(String text,String searchString,String replacement)
- equals:比较两个字符串是否相等,如果两个均为空则也认为相等
public static boolean equals(CharSequence cs1, CharSequence cs2)
- contains:检查字符串seq是否包含字符串searchChar
public static boolean contains(CharSequence seq, CharSequence searchChar)
- indexOf:返回字符searchChar在seq中第一次出现的位置。如果str为null或者"" ,或searchChar没有在没有在seq中出现则返回-1
public static int indexOf(CharSequence seq, CharSequence searchSeq)
- upperCase:小写字符串转换为大写(lowerCase转小写)
System.out.println(StringUtils.upperCase);