字符串判空的几种方式以及他们之间的区别

本文详细解析了Java中String类型的三种状态:分配了内存但值为空、分配内存且值为空字符串、未分配内存无值的情况。同时对比了==与.equals()、str.isEmpty()与TextUtils.isEmpty(str)的区别,并介绍了八种基本数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先先理解这个三个变量的含义:

[java]  view plain  copy
 print ?
  1. String a = new String  
  2. String b = ""  
  3. String c =null  

含义:

[java]  view plain  copy
 print ?
  1. 此时a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已)  
  2. 此时b是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串)  
  3. 此时c是未分配内存空间,无值,是一种无值(值不存在)  

2.==和.equals()的区别
总结:对于== 比较的是栈内存中存放的引用堆内存中对象的引用地址,.equals()比较的是俩个值是否相等,而不是比地址。

3.TextUtils.isEmpty(str)和str.isEmpty()

总结: str.isEmpty();则相当于只判断了str.length == 0。而当空(null)时 str.isEmpty() 会空指针异常。
所以我们可以用TextUtils.isEmpty(str)来代替if(text == null || text.length() == 0)
引用类型继承于Object类(也是引用类型) 常常有引用变量或是String类型变量设置为null,那么null指的是什么?我们看:A a = new A();那么这里a指向堆内存中实例化的A对象。
当a=null,a指向空!我们可以这样理解,null是没有地址,” “是有地址,但里面的内容为空。

4.八种数据类型
  • 基本数据类型:byte,short, int, long, float, double, char, boolean;
  • 引用数据类型:String,引用变量;



### MySQL 中字符串与 NULL 的区别 在 MySQL 数据库中,`NULL` 字符串 `''` 是两个完全不同的概念。以下是它们之间的主要差异及其正确使用方法。 #### 1. 定义上的不同 - **字符串 (`''`)** 表示一个长度为零的字符串,即没有任何字符的内容[^1]。 - **NULL** 表示字段值未知或者不存在的数据状态,它并不表示为字符串或其他任何具体值[^2]。 #### 2. 存储方式的不同 - 字符串会占用存储间来记录其存在,尽管它的实际内容为。 - 而对于 NULL 值来说,数据库通常采用特殊的机制标记该列未赋有效数据,这可能会影响索引效率以及查询性能[^3]。 #### 3. 查询条件中的处理 当需要区分这两者时,在 SQL 查询语句里应该分别对待: ```sql -- 查找所有等于字符串的情况 SELECT * FROM table_name WHERE column_name = ''; -- 查找所有为 NULL 的情况 SELECT * FROM table_name WHERE column_name IS NULL; ``` 注意这里不能用等号操作符(`=`)去匹配 NULL 值,因为按照标准SQL定义,任何东西(包括另一个 NULL)都不等于 NULL;因此必须借助特定的关键字 `IS NULL` 或者 `IS NOT NULL` 来检测某字段是否含有 NULL 值[^4]。 #### 4. 函数行为对比 某些内置函数针对这两种输入会有不一样的表现形式: | 功能描述 | 对于 '' (Empty String) | 对于 NULL | |------------------|-------------------------------|----------------------| | LENGTH() | 返回0 | 返回NULL | | CONCAT('a', '') | 结果仍是'a' | 如果任一参数是NULL,则整个表达式的返回也是NULL | 以上表格展示了几个常用例子[^5]。 ### 正确使用的建议 为了提高程序可读性减少潜在错误风险,请始终明确指定预期的行为模式: - 当希望保存真正意义上的白文本而非缺失信息的时候,请插入串; - 反之如果允许属性可以不被赋予确切数值的话,则考虑设置成接受 NULL 并合理运用相关逻辑控制流程[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值