//接受页面参数
int type = Integer.parseInt(request.getParameter("type"));
String title = request.getParameter("title");
String writer = request.getParameter("writer");
//调用方法
ArticleService articleService = new ArticleService();
//在这个判断为空的地方很不明白
if(title == null && writer == null){
System.out.println("Servlet这边没问题");
List searchArticle = (List)articleService.getArticleByType(type);
request.setAttribute("searchArticle", searchArticle);
request.getRequestDispatcher("showArticle.jsp").forward(request, response);
}else{
System.out.println("Servlet这边有问题");
List searchArticle = (List)articleService.searchArticle(type, title, writer);
request.setAttribute("searchArticle", searchArticle);
request.getRequestDispatcher("showArticle.jsp").forward(request, response);
}
上面的代码是属于一个Servlet中的 他需要处理jsp页面 的2中不同请求 一种请求是需要3个参数的 另外一个请求是需要1个参数的 那么我就需要Servlet中对其中2个可能为空的变量进行判空 一开始我是使用的 "".equals(title) 进行判空的 结果失败 程序执行了 else 中的代码 在我改回title == null 之后 程序才正常 我就不明白了 既然请求页面传递过来根本就没有另外2个参数 那怎么进行equals判空的时候还是为 true 的呢 而使用 title == null 就成功了 我知道 equals是判断内容的 == 是判断地址的 还有一个 title == "" 又是判断怎么一种情况? 刚才写了System.out.println(title); 结果是 null 希望高手可以从 栈内存 堆内存的角度说明一下 谢谢了 我在线等回复
==null判的是是否为null,equals("")判的是是否为空串
title == "" 判是否为同一个空串String对象
if(title == null && writer == null){//这个地方还需要判断条件!比如:"".equals(title)}
如果请求的URL类似于: http://localhost:8080/project/login.jsp?first=1&second=2
那么调用request.getParameter("first")以及request.getParameter("second")都可获得值
如果请求的URL类似于: http://localhost:8080/project/login.jsp?first=1&second=
那么调用request.getParameter("first")可以获得"1"以及request.getParameter("second")这得到空字符串""了
如果请求的URL类似于: http://localhost:8080/project/login.jsp?first=1
也就是你的那种情况,参数数量变化了。
那么调用request.getParameter("first")可以获得"1"以及request.getParameter("second")这得到就是NULL了
如果你原来是这样写的
if("".equals(title) && writer == null){}else{
....就会执行else的代码。
}
title==null 判断title是否在内存中存在 如果为null 说明是不占内存
比如说这一句 虽然请求页面没有该参数 但是 request.getParameter("title"); 之后 System。out.println() 是null 为什么是null 而不能是 "" 呢?
if(str == null || str.length() == 0){
//先判断是否为null, 再判断是否为长度为0的空串
}//判断不为空
if(str != null && str.length() > 0){
//与判断空的情况正反
}//判断相等
if("constanse".equals(str)){
//肯定不会报空指针
}
搞清楚null和""的区别就好办了.
PS:
我的目标是 ----> ^_^
通俗点说:一个是站着茅坑不拉屎,一个是不占茅坑也不拉屎
if(title.equals(null) && writer.equals(null))换成红色字体的代码
他有isempty方法
直接可以用可以到原码里找他的实现
...
}行吗
先判断为是否为null(空),在判断是否为空串最简单的方法
if(title == null || "".equals(title))
米想到。是问“”和null的寒
StringUtils中面有isEmpty,可以用,要自己写,也很简单。public boolean isEmpty(String str) {
retrun str == null || str == "" ?true:false;
}顺建议一下楼主,都整上Servlet了,连最基本的null和"",equals与“==都会不清”。基础很重要呀。
确实很不好意思 发这个帖子问这个问题 也犹豫了 但是还是发了 打破砂锅问到底了 以前学习的时候就是很生硬的记下了什么 null 怎么情况下判断 null equals的问题 对于采取这样一个判断的理由是什么? 还没有时间和能力去弄明白 现在在项目 就是想把以前该会而又很差的东西拿出来 弄清楚 被人嘲笑了也没关系了
那么这个时候 在栈内存中 我们只声明了一个引用变量 title 由于title参数不存在 所以在堆内存中也就不存在一个对象 也就更不可能存在一个内存地址被栈内存中的所指向 栈内存中的title 只有一个 null 所以在进行比较的时候 title == null 比较的是地址 也就是比较title中存储的 对内存中的地址 此时 null 正是 栈内存中title 引用变量所存储的
request.getParameter("title"); 没有这个参数自然是返回null的,若返回""的话那说明找到了参数,只不过参数值是""而已。
要知道""是空字符串,他也是个String对象,也是值。
int type = Integer.parseInt(request.getParameter("type"));
String title = request.getParameter("title");
String writer = request.getParameter("writer");
//调用方法
ArticleService articleService = new ArticleService();
//在这个判断为空的地方很不明白,在这里判断是否为“”或者null,如果是null,证明你的request.getParameter没有取到属性值
if(("".equals(title)||title==null)&&(("".equals(writer)||writer==null)){
System.out.println("Servlet这边没问题");
List searchArticle = (List)articleService.getArticleByType(type);
request.setAttribute("searchArticle", searchArticle);
request.getRequestDispatcher("showArticle.jsp").forward(request, response);
}else{
System.out.println("Servlet这边有问题");
List searchArticle = (List)articleService.searchArticle(type, title, writer);
request.setAttribute("searchArticle", searchArticle);
request.getRequestDispatcher("showArticle.jsp").forward(request, response);
}