字符串null和“ ”两种状态

本文详细解析了Java中字符串为null与被赋值为空字符串()的区别,阐述了这两种状态在内存中的存储方式及如何影响方法调用。通过实例说明了NullPointerException的产生原因,并提供了一些实用建议。

由于对字符串为null和为“ ”两种状态理解理解很模糊,导致在写代码的时候一直报错,而且有点摸不着头脑,有些函数的参数是不能够为null的,因此如果获取到的值为null时会报错。但是有的情况又需要判断字符串的值是否为“ ”,如果对两者区分不准确必然会出现逻辑上的错误,于是自己参考别人的博客,希望自己以后不再犯类似的错误。

字符串为null和被赋值为“ ”时两种不同的状态。

比如String str = null;---------(1)

        String str1 = "";---------(2)

(1)中栈里边会存在str,但是对里边没有对应的值,但是(2)中,栈中会存在str1,堆中也会存放对应的值""(空字符串);

<变量的声明会存放在栈中,变量对应的值会存放在堆内存中> <我们还可以联想到JVM相关的知识,比如垃圾回收机制等等>

(2)上边的赋值(1)中,因为str为null,因而不能够调用String的任何方法会报NullPointerException,而赋值语句(2)中的str1则可以调用String类的任何方法,不会报错。

<自己可以编写String的equals方法和==在使用过程中需要注意的地方>

随笔记下来,以后在使用过程中慢慢体会,对它的掌握更牢固一些。特别感谢前人的博客,大家共同进步。

### 如何在C++中将字符串设置为空 对于不同类型的字符串,在C++中有不同的方法来将其设为空。 #### 对于 `std::string` 可以直接赋值空字符串或者调用`clear()`成员函数: ```cpp #include <string> std::string str; str = ""; // 方法一:直接赋值为空串 // 或者 str.clear(); // 方法二:使用 clear 函数置空 ``` 这两种方式都会使得`str`成为长度为0的有效空字符串对象[^3]。 #### 对于字符指针 (`char*`) 类型 如果处理的是传统的C风格字符串即字符数组,则可以通过如下操作实现清空效果: ```cpp char *cStr = new char[10]; *cStr = '\0'; // 将首字节设为终止符,表示这是一个空字符串 delete[] cStr; // 记得释放分配的空间 ``` 需要注意内存管理以防止泄漏。 #### 使用MFC中的CString类 当涉及到Windows编程时可能会遇到`CString`类型。可以简单地通过默认初始化或显式赋值的方式使其变为null状态: ```cpp CString mfcStr; mfcStr.Empty(); // 清除现有内容并使字符串变为空 ``` 此外,也可以像下面这样利用构造器特性来进行转换重置: ```cpp wchar_t* wszSomeString = L"Some Text"; CString str1(wszSomeString); // 转换并创建新的 CString 实例 str1 = nullptr; // 设置为 NULL/nullptr 来清除其内容 ``` 值得注意的是,在现代C++实践中推荐尽可能采用标准库容器如`std::wstring`而非平台特定的数据结构比如`CString`除非确实有必要[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值