Java 空字符串和 字符串为null的区别
之前一直没有搞清楚 字符串为空和字符串为null的区别,今天写代码一直出现NullPointerException异常,我一直没有搞清楚,后来发现我是这样写的
String s = null;
s = xxx.getString();
if (!s.isEmpty() && s != null) {
System.out.println("ok");
}
我看了半天也没有看懂(拒绝嘲讽)。 所以我看着别人的博文,写一篇作笔记
1. 不同之处
null表示一个字符串对象的引用为空,String a=null; 声明了一个字符串变量a,变量a的引用为空。所以a没有指向任何的内存空间,在堆中也没有开辟任何的空间
空字符串表示一个字符串对象引用的值为空,String a =“” 声明了一个字符串变量a,变量a的值为空。而a指向了空字符串的内存空间。
2. 判断字符串为空的方法
(1) if(s != null && s.equals(""));
(2) if(s != null && s.length() == 0);
public int length() {
return value.length;
}
(3) if(s != null && s.isEmpty());
Java SE 1.6添加的方法,底层的实现和2差不多。
实现的方法:
public boolean isEmpty() {
return value.length == 0;
}
(4) if (s != null && s == "");
注:不要和我一样写反了,两个判断逻辑写反了,就可能出现 NullPointerException异常。
Java 空字符串和 字符串为null的区别的更多相关文章
- Java对象声明时:new与null的区别
作者:林子云链接:https://www.zhihu.com/question/21468505/answer/18333632来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Java空字符串与null的区别和判断字符串是否为空的方法
Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...
- Java进阶(二十一)java 空字符串与null区别
java 空字符串与null区别 1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串, ...
- java关于split分割字符串,空的字符串不能得到的问题
java关于split分割字符串,空的字符串不能得到的问题 class T { public static void main(String args[]) { String num[] = ne ...
- java中空字符串、null的区别
String 的null,或者赋值为"",有什么区别? 废话少说,上代码: public class EmptyAndNull { /** * @param args */ pub ...
- 空字符串‘’ null false 区别
1.''空字符串 .null 和false都是以值为0来存储的 只是数据结构不一致而已 空字符串------字符串数据格式 null -----------null数据格式 false ----- ...
- Java OOP中的字符串篇
字符串的三大特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String.St ...
- 【原】Java学习笔记022 - 字符串
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 字符串 // 定义 ...
- java 后台将base64字符串保存为图片
直接上代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; impo ...
随机推荐
- Java学习之线程通信(多线程(synchronized))--生产者消费者
分析线程经典案例生产者消费者 /** 共享数据 */ class Resource { private String name; private int count=1; private boolea ...
- Django-自定义用户模型
Django最方便的一点,是自带用户系统,但有些情况下,不符合项目需求, 原因1.我们有时候需要自定义一些字段,或者删除Django自带字段,2.我们有时候需要定义哪些字段是必填的,登陆时的用户名是哪 ...
- mybatis的一些小细节
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...
- android ndk 编译 libevent
1. 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/ ...
- JNDI+Tomcat配置数据源的两种方式
非全局jndi配置步骤 :此种配置方式不需要在server.xml中配置数据源,而只在tomcat/conf/Catalina/localhost下的启动配置中配置即可.注意红色字体名称必须和相同. ...
- go 学习之字符串
字符串 字符串是不可变值类型,内部⽤用指针指向 UTF-8 字节数组.默认值是空字符串 "".用索引号访问某字节,如 s[i], i不能是负数.不能⽤用序号获取字节元素指针,&am ...
- 45.Sort List(链表排序)
Level: Medium 题目描述: Sort a linked list in O(n log n) time using constant space complexity. Example ...
- c# 自定义控件之 ComboBox
winform 自带的 combobox 无法支持根据输入文本匹配列表中的项目,需要使用自定义控件. public class MyCombobox : ComboBox { //初始化数据项 pri ...
- 小程序中使用async函数 会报 regeneratorRuntime is not defined的问题
async await比Promise更好的解决异步操作问题,但是在小程序中直接使用会出现以下的错误提示 是因为缺少了regeneratorRuntime这个模块,需要从外部引入 1.在新建的文件夹中 ...
- ros节点启动和关闭相关
Ros node启动与关闭 1. ros运行单位: Ros程序运行的单位是ros node. 2. ros 节点的启动: (1)初始化ros节点:通过调用ros::init()接口实现:可以通过参数指 ...