为什么明明是空值,但是显示非空呢?

jacob1 2001-10-25 03:06:53
情况如下:
在一个new_topic.jsp的文件中有以下语句,用来发送信息,用action传到insertnew_topic.jsp页面中:

<FORM ACTION="insert_newTopic.jsp">
<input type="text" name="topic_name" size=30 >
</FORM>

在文本框是空的情况下,发过去了,在insertnew_topic.jsp页面用以下语句检查发过来的是否空值:
String topic_name=request.getParameter("topic_name");
if(topic_name==null)
out.println("空");
else out.println("不空");

结果在insertnew_topic.jsp的页面中显示的居然是“不空”,
要是把上面那句换成 else out.println(topic_name);
它又没东西显示出来,空白的,这是为什么呢?
(文本框可以确认是空的)
...全文
318 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cherami 2001-10-28
  • 打赏
  • 举报
回复
发生NullPointerException的原因是trim方法的字符串不能为空。
topic_name==null && topic_name.equals("") 当然不行了,既然topic_name是null它就不能再进行比较了,语法上虽然没有错误,但是这个表达式永远不能返回true,如果topic_name为null,那么进行后一个比较时发生NullPointerException,如果topic_name不为null,那么马上返回false,根本就没有意义了。
如果一个字符串的内容为:String a=" ",那么a.equals("")就返回false,而a.trim().length()==0返回true,因为trim方法输出了字符串中的所有前导和后续空格。
jacob1 2001-10-27
  • 打赏
  • 举报
回复
谢谢各位,
我尝试过各位的方法了,最完善的应该是cherami的,仅用National(清心)的方法的话,也行,但如果真会发生NullPointerException的话,岂不危险? 但小弟不明白什么时候会发生这种情况,请指教~

另外
用 topic_name.equals("")表达式比较是行的,
用 topic_name==null && topic_name.equals("") 不行的
也就是说那里不是null,大侠们可以分析一下null和""有什么不同吗?

还有,equals("")和trim().length()==0这两个方法代表的代表有什么差别呢?

分散给分,谢了!

cherami 2001-10-25
  • 打赏
  • 举报
回复
National(清心)的还是有问题,应该先判断是否为空,然后再trim(),否则有可能发生NullPointerException,
if(topic_name!=null&&topic_name.trim().length()>0)
out.println("不空")
else
out.print("空")
National 2001-10-25
  • 打赏
  • 举报
回复
这个问题我遇到过,当时差点气死,最后还算成功了。建议使用这个方法:
if(topic_name.trim().length()==0)
out.println("空")
else
out.print("不空")
null和""是不一样的,remember!
HERO2008 2001-10-25
  • 打赏
  • 举报
回复
应该是这样:

if(topic_name==null && topic_name.equals(""))
out.println("空");
else
out.println("不空");

你自己试试吧!
格利高里 2001-10-25
  • 打赏
  • 举报
回复
NULL与""不是一回事吧。
kcb111 2001-10-25
  • 打赏
  • 举报
回复
应该用topic_name.equals("")比较吧.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧