Reids-介绍


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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值