Tips_self:
--当取到getKind()为空时再getDisplayName()==null会一直报空指针,因为前一个对象getKind已经为空了。
Java 中关于String 对象的空对象(null), 空值(""),空格(" ")对于很多人来说很模糊,下面将分别介绍一下他们的用法:定义,判断,运算。
首先,先上代码:
定义
空对象:
String s = null;
空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法。
空值:
String k = "";
空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空。
空格:
String n = " ";
是指一个字符对象已经实例化,对象的内容为空格。
判断
对于上述三种情况,如何判断一个字符变量属于上述类型,下面主要介绍下方法:
空对象判断:
判断一个字符变量是否是null ,使用 逻辑判断 等于(==)与null对象比较,代码表达式如下:
s == null;
注意: 空对象不能使用诸如equals(), isEmpty()等对象方法,因为它未被实例化。
空值判断:
判断空值可有三种方式:
(1)equals方法比较的是两个对象的内容是否相同,可用表达语句:k.equals("") ;
(2) length()方法是查看某个字符串对象的字符个数,可用表达式判断:k.length() == 0 ;
(3) isEmpty()方法是判断某个字符串对象字符个数时候为0,可用表达式判断:k.isEmpty() ;
空格判断:
空格内容为一个空格,虽然在输出显示时候和空值一样,都是空的,但是在系统里面的内存机制不一样的,空格字符串表示该对象的内存空间里面有内容,是空格,字符个数是1,因此,在使用如下方法时候结果如下:
n.length() 的输出值为1, n.isEmpty()输出为false。
判断语句: n.equals(" ") ;
运算
字符串提供了"+"操作符,表示两个字符串对象可以链接一起,在使用该运算时候,有这样一条规则:如果有一个操作数是字符串,其他操作数会被转换成字符串。
在上面代码s = s + t; s申明时候为空对象,通过"+"时,会将null转化为一个字符串对象。因此结果是nullab。
大家可以对照上面代码例子,更加详细的了解这三者实现机制。
补充:
对象是否为空过滤空行为空不为空StringUtil
java 中如何判断一个未知对象是否为空呢?
下面是一个通用的方法,判断字符串是否为空,集合是否为空,数组是否为空:
参考:org.apache.commons.lang.StringUtils
应用场景:
读取excel文件,转化为一个二维数组:Object[][] arrays
但是excel中有空行,所以需要过滤Object[][] arrays中的空的一维数组:
参阅附件中的方法com.common.util.SystemUtil.filterEmpty
if(carService.getFull(assign.getCar().getId()).getKind() != null){ if("机动".equals(carService.getFull(assign.getCar().getId()).getKind().getDisplayName())){ return true; } }
--当取到getKind()为空时再getDisplayName()==null会一直报空指针,因为前一个对象getKind已经为空了。
Java 中关于String 对象的空对象(null), 空值(""),空格(" ")对于很多人来说很模糊,下面将分别介绍一下他们的用法:定义,判断,运算。
首先,先上代码:
[java] private void testStringNullOrEmpty() { // 如果s=null代表空对象,即还没创建出对象,就是还没开辟空间,。 // 如果s = ""表示创建出了对象,但是这个对象内容为空,也就是空字符串。 // 如果s = " "表示创建出了对象,但是这个对象内容为不为空,而是空格。 String s = null; String k = ""; String n = " "; String t = "ab"; Log.d(TAG, "s = " + s); //output : s = null Log.d(TAG, "k = " + k); //output : k = Log.d(TAG, "t = " + t); //output : t = ab Log.d(TAG, "n = " + n); //output : n = Log.d(TAG, "t.length() = " + t.length()); //output : t.length() = 2 Log.d(TAG, "k.length() = " + k.length()); //output : k.length() = 0 Log.d(TAG, "n.length() = " + n.length()); //output : n.length() = 1 //equals方法比较的是两个对象的内容是否相同,因此,对象必须有指向的空间,即不能为null,否则,会抛出异常。 Log.d(TAG, "k.equals(null) = " + k.equals(null)); //output : k.equals(null) = false Log.d(TAG, "k.equals(\"\") = " + k.equals("")); //output : k.equals("") = true Log.d(TAG, "k.equals(\" \") = " + k.equals(" ")); //output : k.equals(" ") = false Log.d(TAG, "n.equals(\"\") = " + n.equals("")); //output : n.equals("") = false Log.d(TAG, "n.equals(\" \") = " + n.equals(" ")); //output : n.equals(" ") = true // Log.d(TAG, "s.equals(null) = " + s.equals(null)); //异常 Log.d(TAG, "k.isEmpty() = " + k.isEmpty()); //output : k.isEmpty() = true Log.d(TAG, "n.isEmpty() = " + n.isEmpty()); //output : n.isEmpty() = false // Log.d(TAG, "s.isEmpty() = " + s.isEmpty()); //异常 Log.d(TAG, "s == null = " + (s == null)); //output : s == null = true // 在使用"+"操作符时,如果有一个操作数是字符串,其他操作数会被转换成字符串 s = s + t; Log.d(TAG, "after (s + t) s = " + s); //output : after (s + t) s = nullab Log.d(TAG, "s.length() = " + s.length()); //output : s.length() = 6 Log.d(TAG, "s == null = " + (s == null)); //output : s == null = false }
定义
空对象:
String s = null;
空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法。
空值:
String k = "";
空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空。
空格:
String n = " ";
是指一个字符对象已经实例化,对象的内容为空格。
判断
对于上述三种情况,如何判断一个字符变量属于上述类型,下面主要介绍下方法:
空对象判断:
判断一个字符变量是否是null ,使用 逻辑判断 等于(==)与null对象比较,代码表达式如下:
s == null;
注意: 空对象不能使用诸如equals(), isEmpty()等对象方法,因为它未被实例化。
空值判断:
判断空值可有三种方式:
(1)equals方法比较的是两个对象的内容是否相同,可用表达语句:k.equals("") ;
(2) length()方法是查看某个字符串对象的字符个数,可用表达式判断:k.length() == 0 ;
(3) isEmpty()方法是判断某个字符串对象字符个数时候为0,可用表达式判断:k.isEmpty() ;
空格判断:
空格内容为一个空格,虽然在输出显示时候和空值一样,都是空的,但是在系统里面的内存机制不一样的,空格字符串表示该对象的内存空间里面有内容,是空格,字符个数是1,因此,在使用如下方法时候结果如下:
n.length() 的输出值为1, n.isEmpty()输出为false。
判断语句: n.equals(" ") ;
运算
字符串提供了"+"操作符,表示两个字符串对象可以链接一起,在使用该运算时候,有这样一条规则:如果有一个操作数是字符串,其他操作数会被转换成字符串。
在上面代码s = s + t; s申明时候为空对象,通过"+"时,会将null转化为一个字符串对象。因此结果是nullab。
大家可以对照上面代码例子,更加详细的了解这三者实现机制。
补充:
对象是否为空过滤空行为空不为空StringUtil
java 中如何判断一个未知对象是否为空呢?
下面是一个通用的方法,判断字符串是否为空,集合是否为空,数组是否为空:
/** * 判断对象或对象数组中每一个对象是否为空: 对象为null,字符序列长度为0,集合类、Map为empty * * @param obj * @return */ public static boolean isNullOrEmpty(Object obj) { if (obj == null) return true; if (obj instanceof CharSequence) return ((CharSequence) obj).length() == 0; if (obj instanceof Collection) return ((Collection) obj).isEmpty(); if (obj instanceof Map) return ((Map) obj).isEmpty(); if (obj instanceof Object[]) { Object[] object = (Object[]) obj; if (object.length == 0) { return true; } boolean empty = true; for (int i = 0; i < object.length; i++) { if (!isNullOrEmpty(object[i])) { empty = false; break; } } return empty; } return false; }
参考:org.apache.commons.lang.StringUtils
应用场景:
读取excel文件,转化为一个二维数组:Object[][] arrays
但是excel中有空行,所以需要过滤Object[][] arrays中的空的一维数组:
/*** * 过滤数组中的空元素 * * * @param arrays * @return */ public static Object[][] filterEmpty(Object[][] arrays) { int sumNotNull = 0; /*** * 统计非空元素的总个数 */ for (int i = 0; i < arrays.length; i++) { Object object = arrays[i]; if (!ValueWidget.isNullOrEmpty(object) && !SystemUtil.isNullOrEmpty((Object[]) object)) {// 判断元素是否为空 sumNotNull = sumNotNull + 1; } } Object[][] filtedObjs = new Object[sumNotNull][]; int index = 0; for (int i = 0; i < arrays.length; i++) { Object[] object_tmp = arrays[i]; if (!ValueWidget.isNullOrEmpty(object_tmp) && !SystemUtil.isNullOrEmpty((Object[]) object_tmp)) {// 判断元素是否为空 filtedObjs[index++] = object_tmp; } } return filtedObjs; }
参阅附件中的方法com.common.util.SystemUtil.filterEmpty
发表评论
-
java验证字符串中是否包含数字,对数字的操作
2016-03-15 11:01 9478在javascript中有一个方法 ... -
jdk7 Collections.sort()方法报非法参数异常
2016-03-03 18:57 12058JDK7的Comparison method violates ... -
log4j.properties配置详解
2016-01-18 16:50 1271Log4J的配置文件(Configuration File)就 ... -
Java 日期时间 Date类型,long类型,String类型表现形式的转换
2015-12-24 17:35 3268Java 日期时间 Date类型,long类型,String类 ... -
Java多线程-工具篇-BlockingQueue
2015-11-24 16:13 972Java多线程-工具篇-Block ... -
Java 实例 - 队列(Queue)入门用法
2015-11-23 17:27 1994队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表 ... -
Java中序列化的serialVersionUID作用
2015-11-13 14:13 4807Java序列化是将一个对象 ... -
java的序列化和反序列化
2015-10-27 19:48 1108Java基础学习总结——Jav ... -
java中volatile关键字的含义
2015-08-12 20:10 748java中volatile关键字的含 ... -
Java读写文件中文乱码问题
2015-07-20 17:49 2956问题:在用Java程序进行读写含中文的txt文件时,经常会出现 ... -
String类中split方法的使用
2015-07-02 14:39 978String类中split方法的使用 split 方法:将一个 ... -
PreparedStatement防止SQL注入
2015-04-11 16:27 2785一条效率差的sql语句,足以毁掉整个应用. Stateme ... -
Redis与Memcached的区别
2015-04-11 15:20 1067如果简单地比较Redis与Memcached的区别,大多数都 ... -
Session的生命周期
2015-04-11 11:58 903我们已经知道,Session是在用户第一次访问网 ... -
JAVA多线程和并发基础
2015-04-11 11:58 765JAVA多线程和并发基础 ... -
Hibernate一级缓存详解
2015-04-11 11:58 15221.Session 级别的缓存,它同session邦定。它 ... -
Java堆内存Heap与非堆内存Non-Heap
2015-04-08 22:19 1596堆(Heap)和非堆(Non-heap)内存 按照官 ... -
JVM内存模型
2015-04-08 22:07 912/*** 转载请注明作者l ... -
java类加载机制
2015-04-08 21:42 700研究Java类加载机制必要 ... -
classloader加载class的流程及自定义ClassLoader
2015-04-08 21:33 2263/*** 转载请注明作者longdick http: ...
相关推荐
主要介绍了Java中String判断值为null或空及地址是否相等的问题,文中举了简单的例子对字符串类型的值和地址问题进行讲解,需要的朋友可以参考下
主要介绍了详解Java去除json数据中的null空值问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
asp.net中对数据库表插入null空值的问题
深入Java关键字null
在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式...
springboot 处理返回结果中字段为空或为null,不展示字段的问题(字段展示不全),给为空字段初始化值,如:字符串null转换为"
java万能判空工具类-可直接使用-判空不用在单独写,全部调用这个工具类
oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf
PostgreSQL 10 基础课程第五章 高级知识Null空值详解
这就给做数据处理的人带来了麻烦,因为空值和空格都是代表的无数据,而pandas中Series的方法notnull()会把有空格的数据也纳入进来,这样就不能完整地得到我们想要的数据了,这里给出一个简单的方法处理该问题。...
spring mvc拦截器,过滤json数据中的null值,将null变成空字符串,内含截图,及jar包
但打印出来的时候就变成了空对象。 分析原因: 返回的参数都是正确的,只是打印的时候有问题,所以是打印的代码有误 查了一下 axios 的官方文档,才知道 console.log 的变量与字符串之间不能用 ‘+’ 连接,应该用 ...
它可以检查Array,CharSequence,Collection,Map的空对象和空对象。 新增至专案 要使用此库,请将这些依赖项添加到build.gradle repositories { mavenCentral() } dependencies { compile '...
主要介绍了JAVA判断空值方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符。 空字符(”)和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度是NULL,不确定占用了多少存储...
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...
在实际项目中,我们经常需要对各种变量或对象进行判空校验。这是因为,如果不进行判空校验,当遇到空值时,可能会导致程序出现NullPointerException异常。这是一种常见的运行时异常,它会在试图访问或操作空对象引用...
encType="multipart/form-data" 根据上传不同,主要分两步,可以有效的解决request.getParameter(String s)是null值
例如声明一个对象的引用,String a = null ; “”表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String str = "" ; 2、内存分配 String str = null ; 表示声明一个字符串对象的引用,但指向为null...
1. string str; string str=””; string str=null;三者之间有什么区别,最好能用图形表示。 答:区别如下: (1) string str;如果str是局部变量,编译时会...如果是类的成员变量,会被赋null空值,所以等于str=null;