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的判断方法相关推荐

  1. Java中将对象中属性值为空字符串设置为null

    业务逻辑中需要将对象中为空字符串的属性转换为null,简单的一种方式是前端JS控制,如果为空字符串则不传到后台,后台接收到没有值的属性默认为null.这种方式会导致JS繁琐.下面用后台通过反射的方式来 ...

  2. Java中String接受的最大字符串的长度

    java字符串String的最大长度,要分两个阶段,编译阶段及运行时阶段 编译阶段: 我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串, ...

  3. java中怎样建一个空字符串_java-空字符串的Optional实现

    尝试一些事情来解决您的目标,然后意识到我会从VGR那里接受想法,因为与使用现有方法相比,实现这种用例是很多额外的工作. 但是,在花一些时间查看实现之后,我可以添加的细节很少- 作为实用程序,您可以实现 ...

  4. Java中将String格式的标准时间字符串转换为Date格式的方法

    场景 前端在往后端传递时间参数时,传递的是标准时间格式的字符串. 比如下面的lxyf参数 怎样将其转换为Date格式. 注: 博客: https://blog.csdn.net/badao_liuma ...

  5. Java中String字符串:空字符串、存放空的字符串、null的区别

    Java中String字符串:空字符串.存放空的字符串.null的区别 Java String字符串中有三种特殊的字符串:空字符串.存放空的字符串.字符串为Null,如下所示: String str1 ...

  6. 判断java中String、自定义对象、集合为空的方法

    一.仅判断是否分配内存 如果仅判断该对象.集合是否已被分配内存(即null还是非null),而不用考虑是否有值,则直接使用 object == null判断即可. 二.如果需进一步判断 要进一步判断该 ...

  7. java中String xx xx_JAVA超级基础之String型字符串

    字符串 String类型(字符串类型==数据(char[])+操作(char[]中定义的方法)) 功能:字符串常量是系统能够显示的任何文字信息,必须包含在双引号("")之内. 1. ...

  8. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  9. Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

    Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...

最新文章

  1. 共享可写节包含重定位_PE结构学习01-DOS头-NT头-节表头
  2. SAP 业务常用表的收集
  3. Coursera吴恩达《序列模型》课程笔记(1)-- 循环神经网络(RNN)
  4. 常用器件选型——电源篇
  5. Web本地计算发展史
  6. 程序员如何在大公司做管理
  7. GitHub在线开发工具上线,是时候卸载IDE了
  8. 华为Python面试题
  9. lisp 多边形象限_AutoLISP图程序设计.ppt
  10. Mongodb 3.0 创建用户
  11. RHEL5 telnet服务 安装配置
  12. 车用总线技术 | J1939协议实用指南与J1939数据记录方案
  13. MaxDEA如何计算超效率DEA
  14. IPP2P模块修改版,最新0.99.13
  15. android电视root权限获取,各大安卓电视盒子通用!用无线获取ROOT权限教程!
  16. C语言 输出字母倒三角形
  17. 通过opencv制作人脸识别的窗口,这也太疯狂了
  18. 你的登录接口真的安全吗?
  19. c语言 编程 打怪,一起用C语言打怪物
  20. Python数据分析与机器学习7-Seaborn之调色版

热门文章

  1. QT的QCompleter类的使用
  2. 经典C语言程序100例之七一
  3. linux挂载硬盘_CentOS「linux」学习笔记12:磁盘管理、分区挂载卸载操作
  4. Pytorch实现基本循环神经网络RNN (3)
  5. B01_NumPy Ndarray对象(ndarray内容结构,参数,多维,最小维度,dtype参数)
  6. 获取系统URL访问的前三名(通过Scala方式实现/通过Spark方式实现),Spark将URL访问日志进行分类并通过自定义Partitioner的方式将文件写入到不同分区上
  7. CCTMXTiledMap的使用
  8. Kettle使用_23 Excel表格输入ODS POI
  9. 使用py-faster-rcnn来训练voc2007数据集(Ubuntu)
  10. C++之stdafx.h的用法说明