详解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()));

代码示例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   如果想调用一个方法,首先要有一个对象,但是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");
        }

运行结果如下:Exception in thread “main” java.lang.NullPointerException;会提示空指针异常。

到此这篇关于详解java中String值为空字符串与null的判断方法的文章就介绍到这了,更多相关java String空字符串与null内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解java解决XSS攻击常用方法总结

    前言 在项目验收阶段,通常会对待验收项目做一些安全漏洞的测试,比如接口攻击,并发测试,XSS注入,SQL恶意注入测试,安全越权等操作,这时,就是考验项目的安全方面是否做的足够健壮的时候,本篇对XSS脚本攻击在实际WEB项目中的处理办法,提供2种可实行的方法 xss攻击 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序.这些恶意网页程序通常是JavaScript,但实际上也可以包括Java. VBScript.Acti

  • Java map.getOrDefault()方法的用法详解

    Map.getOrDefault(Object key, V defaultValue)方法的作用是: 当Map集合中有这个key时,就使用这个key值: 如果没有就使用默认值defaultValue. 代码示例如下: HashMap<String, String> map = new HashMap<>(); map.put("name", "cookie"); map.put("age", "18"

  • java基础之 Arrays.toString()方法详解

    在实际项目中,如果想要把数组中的内容打印出来,直接使用toString方法只会打印出数组的地址,因此需要使用Arrays的toString方法, 可以从其内部实现中看出来,该方法支持入参可以是long,float,double,int,boolean,byte,object 型的数组. 补充:java中arrays.toString(int [ ] arr)方法的底层原理 我就废话不多说了,大家还是直接看代码吧~ /** *@author:肖佳嘉 * */ * public static Str

  • Java如何重写object类的equals方法详解

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回true Object类是所有类的父类,它的equals方法自然会被所有类继承,有一个子 类String对equals方法进行了覆盖(重写),使其具有了新功能 2.Object类的equals()方法与==没区别 Java.lang.String重写了equals()方法,把equals()方法的判断变为

  • Java 输入流中的read(byte[] b)方法详解

    我就废话不多说了,大家还是直接看代码吧~ public int read(byte[] b) throws IOException 从一个输入流中读取一定数量的字节,并将这些字节存储到其缓冲作用的数组b中.这个函数会返回一次性读取的字节数. 这个函数是一个阻塞式的函数,当它读到有效数据.确认的文件尾(EOF)或者抛出一个异常时它才会执行其他语句,否则一直停在read()函数处等待. 比如下面的列子: ServerSocket server = new ServerSocket(port) Soc

  • java基础之方法详解

    一.什么是方法 Java方法是语句的集合,他们在一起执行一个功能. 1.方法是解决一类问题的步骤的有序组合 2.方法包含于类或对对象中 3.方法在程序中被创建,在其他地方被应用 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的结合.我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展. 当然只读文字不能完全理解,下面的代码一定要自己一个个敲,仔细品味: //类 public class Demo01 { //mian方法,可理解为系统自定义的

  • intellij idea设置统一JavaDoc模板的方法详解

    idea设置统一JavaDoc模板 设置普通注释 按照如下导航找到位置: Setting > Editor > File and Code Templates > Includes > File Header 复制如下,即可实现简单的JavaDoc注释 /** * @author : ChenLiWu * @date : ${DATE} ${TIME} */ 自定义模板 方法注释 按照如下导航找到位置: Setting > Editor > Live Templates

  • Java源码解析之HashMap的put、resize方法详解

    一.HashMap 简介 HashMap 底层采用哈希表结构 数组加链表加红黑树实现,允许储存null键和null值 数组优点:通过数组下标可以快速实现对数组元素的访问,效率高 链表优点:插入或删除数据不需要移动元素,只需要修改节点引用效率高 二.源码分析 2.1 继承和实现 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {

  • Java中ArrayList初始化的四种方法详解

    1 起因 在实际业务开发中, 我们经常会遇到需要临时创建一个数组的情况, 今天我们就来讲一下Java中ArrayList初始化的方法 2 解决方案 直接上结论, 总共有四种初始化方法: 双括号法 Arrays.asList stream Lists 2.1 双括号法 List<Integer> test = new ArrayList<Integer>(){{ add(1); add(2); }}; 2.2 Arrays.asList List<Integer> tes

  • 详解java中String值为空字符串与null的判断方法

    Java空字符串与null的区别 1.类型 null表示的是一个对象的值,而不是一个字符串.例如声明一个对象的引用,String a=null. ""表示的是一个空字符串,也就是说它的长度为0.例如声明一个字符串String s="". 2.内存分配 String a=null:表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间. String s="":表示声明一个字符串类型的引用,其值为""空

  • 详解Java中String类的各种用法

    目录 一.创建字符串 二.字符.字节与字符串的转换 1.字符与字符串的转换 2.字节与字符串的转换 三.字符串的比较 1.字符串常量池 2.字符串内容比较 四.字符串查找 五.字符串替换 六.字符串拆分 七.字符串截取 八.String类中其它的常用方法 九.StringBuffer 和 StringBuilder 1.StringBuilder与StringBuffer的区别 2.StringBuilder与StringBuffer常用的方法 十.对字符串引用的理解 一.创建字符串 创建字符串

  • 详解Java中String,StringBuffer和StringBuilder的使用

    目录 1.String类 2.String对象创建的两种方式 3.String常用方法 4.StringBuffer String和StringBuffer的转换 StringBuffer的常用方法 5.StringBuilder 1.String类 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. String对象实现了Serializable接口,说明String对象可以串行化(在网络中进行传输),同时实现了Comp

  • 详解Java中String JSONObject JSONArray List<实体类>转换

    JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: 'com.alibaba', name: 'fastjson', version:'1.2.41' 1.String转JSONObject 前言:String 是JSONObject格式的字符串 eg: JSONObject jSONObject = JSONObject.parseObject(String); 2.String转JSONArray 前言:String 是JSONArray格式

  • 详解Java中String类型与默认字符编码

    为什么写这个 至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死 Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着,但是嫌麻烦.这次终于忍不住了,一定要弄个明白 String类型的编码方式 从网上查的资料都说,Java默认的字符编码是Unicode,而String类型的编码方式是与JVM编码方式和本机操作系统默认字符集有关的.于是我做出了测试 在Java中可以这样显示查看本地编码方式(JVM还是OS呢?) //

  • 详解java中String、StringBuilder、StringBuffer的区别

    你知道String.StringBuilder.Stringbuffer的区别吗?当你创建字符串的时候,有考虑过该使用哪个吗? 别急,这篇文章带你解决这些问题. 可变性 首先,String是字符串,我们一般这样声明: String s = "abc"; String类使用被final修饰的char数组来存储字符串的内容,它的一大特性就是不可变,怎么理解这个不可变呢? 我们知道,一个类被final修饰,那么这个类无法被继承,方法也不能被重写,属性也不能改变. 看看这段代码: String

  • 详解.NET中string与StringBuilder在字符串拼接功能上的比较

    string与StringBuilder的在字符串拼接时执行效率上有差异,因为StringBuilder类中用了一个技巧:它申请了两倍的内存空间存放字符串,在调用Append方法拼接字符串时,会先检查剩余的空间是否能放下要拼接的字符串,若能放下,则将要拼接的字符串Copy到剩余的空间中,若不能放下,则再申请拼接后的字符串两倍的长度空间,将当前字符串Copy到新的空间中(除了两倍的空间外,这点跟string的拼接没有太多的差异).因此StringBuilder能提高字符串拼接的效率在于它减少了申请

  • 详解Java中AbstractMap抽象类

    jdk1.8.0_144 下载地址:http://www.jb51.net/softs/551512.html AbstractMap抽象类实现了一些简单且通用的方法,本身并不难.但在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以说是教科书式的典范. 抽象类通常作为一种骨架实现,为各自子类实现公共的方法.上一篇我们讲解了Map接口,此篇对AbstractMap抽象类进行剖析研究. Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实

  • 详解Java中NullPointerException异常的原因详解以及解决方法

    NullPointerException是当您尝试使用指向内存中空位置的引用(null)时发生的异常,就好像它引用了一个对象一样. 当我们声明引用变量(即对象)时,实际上是在创建指向对象的指针.考虑以下代码,您可以在其中声明基本类型的整型变量x: int x; x = 10; 在此示例中,变量x是一个整型变量,Java将为您初始化为0.当您在第二行中将其分配给10时,值10将被写入x指向的内存中. 但是,当您尝试声明引用类型时会发生不同的事情.请使用以下代码: Integer num; num

  • 详解Java中的延时队列 DelayQueue

    当用户超时未支付时,给用户发提醒消息.另一种场景是,超时未付款,订单自动取消.通常,订单创建的时候可以向延迟队列种插入一条消息,到时间自动执行.其实,也可以用临时表,把这些未支付的订单放到一个临时表中,或者Redis,然后定时任务去扫描.这里我们用延时队列来做.RocketMQ有延时队列,RibbitMQ也可以实现,Java自带的也有延时队列,接下来就回顾一下各种队列. Queue 队列是一种集合.除了基本的集合操作以外,队列还提供了额外的插入.提取和检查操作.队列的每个方法都以两种形式存在:一

随机推荐