十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
定义 String str;
成都创新互联公司于2013年开始,先为衡南等服务建站,衡南等地企业,进行企业商务咨询服务。为衡南企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
判断字符串是否空涉及两个层次:
1、是首先判断字符串变量的引用是否为空,即空对象的概念,用null来判断,可以用if(str==null) 判断 str是否为空;(注意不能用equals(null),在参数为null情况下,返回值永远是false);
2、是在不为空对象的情况下,在判断字符串对象是否为空串,即长度为0.用length()==0。 关键是搞清楚字符串对象为空和空字符串有区别。
拓展内容
Java空字符串与null的区别:
1、类型
null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a = null ;
""表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String str = "" ;
2、内存分配
String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间;
String str = ""; 表示声明一个字符串类型的引用,其值为""空字符串,这个str引用指向的是空字符串的内存空间;
在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap)。
如下:
String str = new String("abc") ;
参考资料:java官方网站
Java中字符串的常用方法
有一种模式叫NullObject,意思就是建立一个专用的空对象,以此来代表结果为空。比如这样:
public interface MyObj {
public String someOp();}
public class NullObj implements MyObj {
public String someOp() {
return It's a content of NullObj; // 或者抛出一个特定异常,又或者打印出一条警告信息}}
public class NormalObj implements MyObj {
public String someOp() {
String result = null;
// 执行一些正常的代码
return result;}}用法:1、建立全局常量:
public enum Constants { //这种写单例的方式在《Effective Java》中被推荐过,非常好的实现方式。
ONE;public final MyObj NULL_OBJ = new NullObj(); //如果用enum写单例的话这里就不用static修饰符了。}2、被调用的代码在条件符合的时候返回NullObj:
public class Server {
public MyObj receive(String param) {
if (param == null) {
System.out.println(...); //记录一些log
return Constants.ONE.NULL_OBJ;}MyObj result = null;
return result;}
...}3、在调用方:
public class Client {
public result send(String content) {
Server server = null;
String result = null;try {
... //初始化server
MyObj myObj = server.receive(content);
result = myObj.someOp(); //如果你前面选择的是抛出特定异常,则这行代码就必须放在try-catch语句块中了
...}}}当然,通过捕获异常来进行流程控制的方式是不被推荐的。NullObject很灵活,可以做出很多扩展性很强的实现方案。
在Java中,一个类为空的判断是常用的功能。但是各种类的空判断却不一样
当一个方法返回的是一个Object时,应使用==null来判断是否为空,例如在Servlet中的session判断用户是否登录可以用如下的代码
if (session.getAttribute("LoginUser")==null){
.............
}
但是如果是一个String类型的变量,或者某一个方法返回的是String类型的结果。其判断为空的方式又不一样了。需要使用String类中的equals方法。例如在JSP中获取URL中的参数,为保险起见,可以先判断这个参数是否为空,不空再获取。如果直接获取,一旦这个参数没有, 会造成空指向异常。代码如下
if (request.getParameter("id").toString().equals(null)){
out.println("未提供参数");
}else{
String id=request.getParameter("id").toString();
out.println(id);
}
假设页面地址为
如果不加判断 直接使用
String id=request.getParameter("id").toString();
out.println(id);
会造成空指向异常,而使用了判断后,这种情况下不报错,在页面上显示“未提供参数”。如果地址栏输入的是
则页面输出“123”
另外在字符串的“空”验证时还要注意一种情况,那就是“”空。
如果假想Java中有指针的概念的话,String a为null空,则表示变量没有指针去映射它;而String a为“”空,则表示该字符串有指针映射,但是映射到的内容为空。