java中String值为空字符串与null的判断方法
Java空字符串与null的区别
1、类型
null表示的是一个对象的值,而不是一个字符串。例如声明一个对象的引用,String a=null。
“”表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String s=”“。
2、内存分配
String a=null;表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间。
String s=”“;表示声明一个字符串类型的引用,其值为“”空字符串,这个s引用指向的是空字符串的内存空间;
在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是放在堆中(heap):
就如下:
String str =new String(“abc”);
ps:=左边的是存放在栈中(stack),=右边是存放在堆中(heap)。
代码示例1:
String str1=null;
String str2="";
//str1==null 为true
System.out.println("str1和null的==比较结果为:"+(str1==null));
//java.lang.NullPointerException 空指针异常
System.out.println("str1的isEmpty()方法"+(str1.isEmpty()));
//java.lang.NullPointerException 空指针异常
System.out.println("str2的length()方法"+(str1.length()));
//java.lang.NullPointerException 空指针异常
System.out.println("str1和null的equals比较结果为:"+(str1.equals(null)));
//str2==null 为false
System.out.println("str2和null的==比较结果为:"+(str2==null));
//str2=="" 为true
System.out.println("str2和"+""+"的==比较结果为:"+(str2==""));
//str2.isEmpty() 为true
System.out.println("str2的isEmpty()方法"+str2.isEmpty());
//str2.equals(null) 为true
System.out.println("str2和null的equals方法比较结果为:"+(str2.equals(null)));
//str2.isEmpty() 为true
System.out.println("str2的isEmpty()方法"+(str2.isEmpty()));
//str2.length() 结果为0
System.out.println("str2的length()方法"+(str2.length()));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
代码示例2:
String str1 = new String() ;
String str2 = null ;
String str3 = "" ;
System.out.println(str1==str2); //内存地址的比较,返回false
System.out.println(str1.equals(str2)); //值的比较,返回false
System.out.println(str2==str3); //内存地址的比较,返回false
System.out.println(str3.equals(str2)); //值的比较,返回false
System.out.println(str1==str3); //内存地址的比较,返回false
System.out.println(str1.equals(str3)); //值的比较,返回true
1
2
3
4
5
6
7
8
9
通过以上的两个代码示例可以得出以下结论:
1 如果想调用一个方法,首先要有一个对象,但是null并不是一个对象,内存中都没有它的空间,所以null是不能够调用String中的方法的,isEmpty和length和equals方法都不能够调用。
2 字符串对象与null的值不相等,且内存地址也不相等。
3 空字符串对象与null的值不相等,且内存地址也不相等。
4 new String()创建一个字符串对象的默认值为”” (String类型成员变量的初始值为null。
java判断字符串是都为空的方法
方法1
最多人使用的一个方法, 直观, 方便, 但效率很低:
if(s == null || s.equals(“”));
方法2
比较字符串长度, 效率高, 是我知道的最好一个方法:
if(s == null || s.length() == 0);
方法3
Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二.
if(s == null || s.isEmpty());
方法4
这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多:
if (s == null || s == “”);
注意:s==null是有必要存在的。
如果 String 类型为null, 而去进行 equals(String) 或 length() 等操作会抛出java.lang.NullPointerException。
并且s==null 的顺序必须出现在前面,不然同样会抛出java.lang.NullPointerException。
如以下java代码:
String s = null ;
if(s.equals("") || s == null)
{
System.out.println("success");
}
1
2
3
4
5
运行结果如下:Exception in thread “main” java.lang.NullPointerException;会提示空指针异常。
————————————————
版权声明:本文为CSDN博主「wilson_m」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wilson_m/article/details/79120347
java中String值为空字符串与null的判断方法相关推荐
- Java中将对象中属性值为空字符串设置为null
业务逻辑中需要将对象中为空字符串的属性转换为null,简单的一种方式是前端JS控制,如果为空字符串则不传到后台,后台接收到没有值的属性默认为null.这种方式会导致JS繁琐.下面用后台通过反射的方式来 ...
- Java中String接受的最大字符串的长度
java字符串String的最大长度,要分两个阶段,编译阶段及运行时阶段 编译阶段: 我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串, ...
- java中怎样建一个空字符串_java-空字符串的Optional实现
尝试一些事情来解决您的目标,然后意识到我会从VGR那里接受想法,因为与使用现有方法相比,实现这种用例是很多额外的工作. 但是,在花一些时间查看实现之后,我可以添加的细节很少- 作为实用程序,您可以实现 ...
- Java中将String格式的标准时间字符串转换为Date格式的方法
场景 前端在往后端传递时间参数时,传递的是标准时间格式的字符串. 比如下面的lxyf参数 怎样将其转换为Date格式. 注: 博客: https://blog.csdn.net/badao_liuma ...
- Java中String字符串:空字符串、存放空的字符串、null的区别
Java中String字符串:空字符串.存放空的字符串.null的区别 Java String字符串中有三种特殊的字符串:空字符串.存放空的字符串.字符串为Null,如下所示: String str1 ...
- 判断java中String、自定义对象、集合为空的方法
一.仅判断是否分配内存 如果仅判断该对象.集合是否已被分配内存(即null还是非null),而不用考虑是否有值,则直接使用 object == null判断即可. 二.如果需进一步判断 要进一步判断该 ...
- java中String xx xx_JAVA超级基础之String型字符串
字符串 String类型(字符串类型==数据(char[])+操作(char[]中定义的方法)) 功能:字符串常量是系统能够显示的任何文字信息,必须包含在双引号("")之内. 1. ...
- java中字符串的创建_【转载】 Java中String类型的两种创建方式
本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...
- Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释
Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...
最新文章
- 共享可写节包含重定位_PE结构学习01-DOS头-NT头-节表头
- SAP 业务常用表的收集
- Coursera吴恩达《序列模型》课程笔记(1)-- 循环神经网络(RNN)
- 常用器件选型——电源篇
- Web本地计算发展史
- 程序员如何在大公司做管理
- GitHub在线开发工具上线,是时候卸载IDE了
- 华为Python面试题
- lisp 多边形象限_AutoLISP图程序设计.ppt
- Mongodb 3.0 创建用户
- RHEL5 telnet服务 安装配置
- 车用总线技术 | J1939协议实用指南与J1939数据记录方案
- MaxDEA如何计算超效率DEA
- IPP2P模块修改版,最新0.99.13
- android电视root权限获取,各大安卓电视盒子通用!用无线获取ROOT权限教程!
- C语言 输出字母倒三角形
- 通过opencv制作人脸识别的窗口,这也太疯狂了
- 你的登录接口真的安全吗?
- c语言 编程 打怪,一起用C语言打怪物
- Python数据分析与机器学习7-Seaborn之调色版
热门文章
- QT的QCompleter类的使用
- 经典C语言程序100例之七一
- linux挂载硬盘_CentOS「linux」学习笔记12:磁盘管理、分区挂载卸载操作
- Pytorch实现基本循环神经网络RNN (3)
- B01_NumPy Ndarray对象(ndarray内容结构,参数,多维,最小维度,dtype参数)
- 获取系统URL访问的前三名(通过Scala方式实现/通过Spark方式实现),Spark将URL访问日志进行分类并通过自定义Partitioner的方式将文件写入到不同分区上
- CCTMXTiledMap的使用
- Kettle使用_23 Excel表格输入ODS POI
- 使用py-faster-rcnn来训练voc2007数据集(Ubuntu)
- C++之stdafx.h的用法说明