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异常。

时间: 2024-10-08 09:04:06

Java 空字符串和 字符串为null的区别的相关文章

Java中string 创建对象时 “”和null的区别

null和""的区别 问题一: null和""的区别 String s=null; string.trim()就会抛出为空的exception String s=""; string.trim()就不会抛,为什么? 答: NULL代表声明了一个空对象,根本就不是一个字符串. ""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串. NULL代表声明了一个空对象,对空对象做任何操作都不行的,除了=和== "

java关于split分割字符串,空的字符串不能得到的问题

java关于split分割字符串,空的字符串不能得到的问题 class T { public static void main(String args[]) { String num[] = new String[11]; String sLine = "101494|360103660318444|2008/06/17|周润英|1292.0|3085.76|2778.28|912.91|106.0|||"; num = sLine.split("\\|"); in

java 后台将base64字符串保存为图片

直接上代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Test { public static void main(String[] args

【原】Java学习笔记023 - 字符串缓冲区_正则表达式

1 package cn.temptation; 2 3 import java.util.Arrays; 4 5 public class Sample01 { 6 public static void main(String[] args) { 7 // 因为字符串创建后就不能修改,导致在进行字符串拼接时,会产生大量的中间字符串,创建对象都是需要消耗资源 8 // 所以,能不用字符串的直接拼接尽量不使用 9 10 // 字符串缓冲区:StringBuffer类/StringBuilder类

JAVA中用于处理字符串的“三兄弟”

JAVA中用于处理字符串常用的有三个类:java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder,这三者的共同之处都是final类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用.StringBuffer与StringBuilder两个基本上差不多,只是StringBuffer是线程安全,可以不需要额外的同步用于多线程中:StringBuilder是非

使用JAXB实现JAVA对象和XML字符串的互相转换实例

测试类: package com.yanek.test; import java.util.ArrayList; import java.util.List; import com.yanek.test.JaxbUtil.CollectionWrapper; public class Test { /** * @param args */ public static void main(String[] args) { //创建java对象 Hotel hotel=new Hotel(); ho

Java 中基本类型和字符串之间的转换

Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使用String类的 valueOf() 方法 3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串 再来看,将字符串转换成基本类型有两种方法: 1. 调用包装类的 parseXxx 静态方法 2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱 PS:其他基

java-String类中的各字符串判断(包括" "和null的区别)

package com.day7.one; public class DemoString1 { /** * @param args * 1.boolean equals(Object obj) 比较字符串的内容是否相同,区分大小写 * 2.boolean equalsIgnoreCase(String str) 比较字符串内容是否相同,不区分大小写 * 3.boolean contains(String str) 判断大字符串中是否包含小字符串 * 4.boolean startWith(St

java对象转为json字符串

1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为json字符串,初始化时最好添加get()和set()方法,避免错误 原文地址:https://www.cnblogs.com/cty136/p/11521264.html