由getText()返回值引发的血案

在实现搜索功能时遇到一个问题,发现EditText无内容时getText()返回空字符串而非null。理解空字符串与null的不同,null表示不存在的不占内存,而空字符串在内存中有地址。在比较时,对于String应使用equals方法而非==。
摘要由CSDN通过智能技术生成

今天在做搜索框的时候,使用了一个逻辑,就是在点击搜索按钮之后,就会对EditText里的文本进行处理,如果输入了内容,那么就去执行相应的搜索方法,如果,输入的内容为空,那么就用Toast输出一条提示消息。那么,问题来了,当我在检查输入内容是否为空时

<pre name="code" class="java">EditText tv = (EditText) view.findViewById(R.id.edit_search_info);
keyword = tv.getText().toString();
if (keyword==null)
{
	oast.makeText(getActivity(), "搜索内容为空", Toast.LENGTH_LONG).show();
	break;
}

 

然后我却惊奇的发现程序崩溃了,找了很久之后才发现,原来keyword根本就!=null,于是乎直接去执行了后面的代码,就报错了。

后来我去网上查了getText的返回值,才发现如果EditView中没有内容的话,那么GetText()函数返回的不是null,而是空字符串 ""。

于是,问题又来了,空串和null是同一个东西吗?答案很明显了:他们根本不是同一个东西。null指的是一个不存在的不占内存的,而""指的则是一个已经存在了的字符串,但是字符串中不占内存,实际上,程序中已经给空串""分配了地址空间。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值