JAVA学习笔记_StringUtil.isEmpty_"null"不是null

来源:互联网 发布:淘宝 prd mrd 模板 编辑:程序博客网 时间:2024/05/01 16:40

StringUtil工具类

/** * 字符串的帮助类 */public class StringUtil {    /**     * 判断字符串是否为空     * @param str     * @return     */    public static boolean isEmpty(String str) {        if (str != null  && !"".equals(str.trim())) {            return false;        }        return true;    }    /**     * 判断字符串是否不为空     * @param str     * @return     */    public static boolean isNotEmpty (String str) {        if (str != null && !"".equals(str.trim())) {            return true;        }        return false;    }}

问题描述: 一开始认为 str值为null 是 不应该 返回 true的
这里写图片描述
问题解决:

虽然值均为null ,但是一个是str=“null”,另一个str=null
这里写图片描述

这里写图片描述

问题总结:
在eclipse中,不带双引号的null,表示的是一个对象的值
带双引号 的null,表示的是值为null的字符串
这里写图片描述

Java空字符串与null区别:

1、类型
null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a = null ;
“”表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String str = “” ;

2、内存分配
String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间;
String str = “”; 表示声明一个字符串类型的引用,其值为”“空字符串,这个str引用指向的是空字符串的内存空间;

在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap):

就如下:

String str = new String(“abc”) ;

ps:=左边的是存放在栈中(stack),=右边是存放在堆中(heap)。