精华内容
下载资源
问答
  • 最近代码走查,讨论到数组判空,正好整理一下,记录一下不同数据类型判空方式! 一、String类型数据  String类型数据判空我们一般需要判断是否是 null 或者 "";  例如 String str = null; 对于str...

    最近代码走查,讨论到数组判空,正好整理一下,记录一下不同数据类型判空方式!

    一、String类型数据

        String类型数据判空我们一般需要判断是否是 null 或者 "";

        例如 String str = null;

    对于str的判断我们传统方式有:str != null && str != ""      或者  str != null && !str.isEmpty     或者  str != null && !"".equals(str)

    当然还有str != null && str.length>0()也可以,不过今天讲的是另一种方式: StringUtils.isNotBlank(str)  。

    StringUtils.isNotBlank(str)我觉得还是挺方便的!

    源码:

    ------------------------------------------------下面是重点-----------------------------------------------------------

    说到这里,就得多说两句了,我们往往从Map或者JSON里获得String数据时,往往获得的是OBJECT对象,我们需要转化成String类型!

    我们往往用str.toString() 或者 String.valueOf(str)  方式;这两种确实都是可以的,不过这两种各有利弊,第一种如果缺失null判断,会出现空指针异;而第二个,更是容易有隐藏的BUG,当str为null时,String.valueOf(str)  转换后的结果是 str = "null";是的,你没看错,str = 字符串null;String.valueOf(str).length() = 4。所以说这个平时还是需要注意点的!

    看源码:

    二、List数组判空

        与String一样,List数组判空,我们也是要判断是否是 null 或者 空数组;

        例如:List list = new ArrayList<String>();

    我们平常喜欢用的方式是:list != null && list.size()>0      或者 list != null && !list.isEmpty()

    不过今天我们推荐一下apache的CollectionUtils类:CollectionUtils.isNotEmpty(list)  可以同时判断是否为 null 或者空数组。这个我感觉还挺方便的!

    看他的源码:

     

    后续有又遇到好的判断就在增加。。。。。。。

     

     

         

    展开全文
  • java 判空总结

    2019-08-05 10:41:59
    1.集合判空 1.1 List集合判空 //集合为NULL或集合大小为0,判断为空 import org.apache.commons.collections.CollectionUtils; List list = new ArrayList(); CollectionUtils.isEmpty(list); 2.Map判空 //Map...

    1.集合判空
    1.1 List集合判空

       //集合为NULL或集合大小为0,判断为空
       import org.apache.commons.collections.CollectionUtils;
       List list = new ArrayList();
       CollectionUtils.isEmpty(list);
    

    2.Map判空

    //Map为NULL或没有键值对判断为空
    Map的自带方法-java.util.Map.isEmpty()
    Map map = new HashMap();
    map.isEmpty();
    

    3.字符串判空

     //字符串为NULL或字符串长度为0,判断为空
     import org.apache.commons.lang.StringUtils;
     String str = "";
     StringUtils.isNotBlank(str);
    
    展开全文
  • Java 优雅判空方法

    2020-10-29 13:54:49
    为了避免 NullPointerException 出现,我们经常会进行如下操作。 if (object != null) { object.do(); } 那么每次使用一个不确定的对象,都需要进行一次...当然我们可以使用 JDK8 提供的 Optional 来避免判空,但是

    为了避免 NullPointerException 出现,我们经常会进行如下操作。

    if (object != null) {
        object.do();
    }
    

    那么每次使用一个不确定的对象,都需要进行一次判空。so:
    在这里插入图片描述
    可能你会想,项目中肯定不止你一个人会这样一顿操作,然后按下 Ctrl+Shift+F,真相就在眼前:
    在这里插入图片描述
    What,我们有接近一万行的代码都是在判空?

    那么我们不禁会想有什么办法可以避免在代码中写大量的判空语句呢?

    当然我们可以使用 JDK8 提供的 Optional 来避免判空,但是用起来还是有些麻烦。

    进入正题,这里将依托于一个小需求来介绍一个封装工具类,可以实现链式调用对象成员而无需判空,相比原有的if null 逻辑 和 JDK8 提供的 Optional 更加优雅易用,在工程实践中大大提高了编码效率,也让代码更加的精准和优雅。

    需求介绍

    我们有一个 User 类,里面有成员变量 School 类,School 类有字符串类型的成员变量 scName

    而我们的需求就是通过 User 对象,获取其内的 School 对象的 scName 学校名称值。此时我们势必要判断 User 对象和其内的 School 对象是否为空,才能直接获取 scName 值。

    /**
    * @author cjh
    * @date Created on 2020/10/29
    * @summary 一个 User 类定义
    * (Ps:Data 是lombok组件提供的注解,简化了get set等等的约定代码)
    */
    @Data
    public class User {
    
        private String name;
    
        private String gender;
    
        private School school;
    }
    
    @Data
    public static class School {
    
        private String scName;
    
        private String adress;
    }
    

    不优雅的判空调用

    现在想要获得School的成员变量 adress , 一般的处理方式:

    /**
     * @author cjh
     * @date Created on 2020/10/21
     * @summary 获取 User 类的 School 对象的校名值
     */
    public class Test {
        public static void main(String[] args) throws Exception {
            User cjh = new User();
            School school = new School();
            cjh.setSchool(school);
            school.setAdress("林伟华中学");
    
            if (Objects.nonNull(cjh) && Objects.nonNull(cjh.getSchool())) {
                School cjhSc = cjh.getSchool();
                System.out.println(userSc.getAdress());
            }
        }
    }
    

    OptionalBean 工具类

    /**
    * @author cjh
    * @since 2020-10-29
    * @summary 链式调用 bean 中 value 的方法
    */
    public final class OptionalBean<T> {
    	
        private static final OptionalBean<?> EMPTY = new OptionalBean<>();
    
        private final T value;
    
        private OptionalBean() {
            this.value = null;
        }
    
        /**
         * 空值会抛出空指针
         * @param value
         */
        private OptionalBean(T value) {
            this.value = Objects.requireNonNull(value);
        }
    
        /**
         * 包装一个不能为空的 bean
         * @param value
         * @param <T>
         * @return
         */
        public static <T> OptionalBean<T> of(T value) {
            return new OptionalBean<>(value);
        }
    
        /**
         * 包装一个可能为空的 bean
         * @param value
         * @param <T>
         * @return
         */
        public static <T> OptionalBean<T> ofNullable(T value) {
            return value == null ? empty() : of(value);
        }
    
        /**
         * 取出具体的值
         * @param fn
         * @param <R>
         * @return
         */
        public T get() {
            return Objects.isNull(value) ? null : value;
        }
    
        /**
         * 取出一个可能为空的对象
         * @param fn
         * @param <R>
         * @return
         */
        public <R> OptionalBean<R> getBean(Function<? super T, ? extends R> fn) {
            return Objects.isNull(value) ? OptionalBean.empty() : OptionalBean.ofNullable(fn.apply(value));
        }
    
        /**
         * 如果目标值为空 获取一个默认值
         * @param other
         * @return
         */
        public T orElse(T other) {
            return value != null ? value : other;
        }
    
        /**
         * 如果目标值为空 通过lambda表达式获取一个值
         * @param other
         * @return
         */
        public T orElseGet(Supplier<? extends T> other) {
            return value != null ? value : other.get();
        }
    
        /**
         * 如果目标值为空 抛出一个异常
         * @param exceptionSupplier
         * @param <X>
         * @return
         * @throws X
         */
        public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
            if (value != null) {
                return value;
            } else {
                throw exceptionSupplier.get();
            }
        }
    
        public boolean isPresent() {
            return value != null;
        }
    
        public void ifPresent(Consumer<? super T> consumer) {
            if (value != null)
                consumer.accept(value);
        }
    
        @Override
        public int hashCode() {
            return Objects.hashCode(value);
        }
    
        /**
         * 空值常量
         * @param <T>
         * @return
         */
        public static<T> OptionalBean<T> empty() {
            @SuppressWarnings("unchecked")
            OptionalBean<T> none = (OptionalBean<T>) EMPTY;
            return none;
        }
    
    }
    

    工具设计主要参考了 Optional 的实现,再加上对链式调用的扩展就是上述的OptionalBean。

    getBean 其实是当变量为空时返回了一个 包装空值的 OptionalBean 对象,同时泛型的使用让工具更加易用。

    链式调用成员变量:

    public static void main(String[] args) {
        User cjh = new User();
        School school = new School();
        cjh.setSchool(school);
        school.setAdress("林伟华中学");
    
        // 1. 基本调用
        String value1 = OptionalBean.ofNullable(cjh)
                .getBean(User::getSchool)
                .getBean(School::getAdress)
                .get();
        System.out.println(value1);
    
        // 2. 扩展的 isPresent方法 用法与 Optional 一样
        boolean present = OptionalBean.ofNullable(cjh)
                .getBean(User::getSchool)
                .getBean(School::getAdress)
                .isPresent();
        System.out.println(present);
    
        // 3. 扩展的 ifPresent 方法
        OptionalBean.ofNullable(cjh)
                .getBean(User::getSchool)
                .getBean(School::getAdress)
                .ifPresent(address -> System.out.println(String.format("地址存在:%s", address)));
    
        // 4. 扩展的 orElse
        String value2 = OptionalBean.ofNullable(cjh)
                .getBean(User::getSchool)
                .getBean(School::getAdress)
                .orElse("搬砖打工");
        System.out.println(value2);
    
        // 5. 扩展的 orElseThrow
        try {
            String value3 = OptionalBean.ofNullable(cjh)
                    .getBean(User::getSchool)
                    .getBean(School::getAdress)
                    .orElseThrow(() -> new RuntimeException("空指针了"));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
    展开全文
  • java判空工具类

    2018-07-20 15:40:12
    Java工具类Java工具类Java工具类Java工具类Java工具类Java工具类
  • java 字符串判空方法

    2020-06-16 16:21:19
    如何判断字符串是否为(null)或者是字符串("")的方法 基础:null和""的区别 null表示这个字符串没有任何指向,因为null没有分配空间。而""在堆中分配了空间。 方法介绍: 方法一: 使用很多的一个方法, 直观,...

    如何判断字符串是否为空(null)或者是空字符串("")的方法

    基础:null和""的区别

    null表示这个字符串没有任何指向,因为null没有分配空间。而""在堆中分配了空间。

    方法介绍:

    方法一: 使用很多的一个方法, 直观, 方便, 但效率很低。

    if(s == null || s.equals(""));
    

    方法二: 比较字符串长度, 效率高的最好一个方法。

       if(s == null || s.length() == 0);
    

    方法三: Java1.6 才开始提供的方法, 效率和方法二几乎相等。

    if(s == null || s.isEmpty());
    

    方法四: 比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多:

     if (s == null || s == "");
    

    测试

    package com.demo1;
    
    public class Test {
    
    	public static void main(String[] args) {
    		String s = "";
    		if(s == null || s.equals("")){
    			System.out.println("方法一判空");
    			System.out.println(s == null || s.equals(""));
    		}
    		if(s == null || s.length() == 0){
    			System.out.println("方法二判空");
    			System.out.println(s == null || s.length() == 0);
    		}
    		if(s == null || s.isEmpty()){
    			System.out.println("方法三判空");
    			System.out.println(s == null || s.isEmpty());
    		}
    		if(s == null || s == ""){
    			System.out.println("方法四判空");
    			System.out.println(s == null || s == "");
    		}
    	}
    }
    
    

    结果
    在这里插入图片描述

    展开全文
  • 背景:程序中经常会出现指针异常,如 Exception in thread "main" java.lang.NullPointerException 现在提供两个常用的工具类,可以使代码更加简洁和安全 1.安全使用List import org.apache.commons....
  • java判空方法 一:java判断字符串是否为空的方法总结 方法一:开发中最常用的方法,看起来也比较高大上: if(StringUtils.isNotBlank(str))//判断字符串不为空 或if(StringUtils.isBlank(str))//判断字符串为空 ...
  • Java String 判空的常用方法

    万次阅读 2018-06-18 02:58:56
    java String的判空方法算是java开发中的一个很基础的方法,但是自己有时候会忘记,所以写篇博客总结加深记忆。方法一:是我所知道的效率的最高的,也是最常用的方法。if(s == null || s.length() &lt;= 0)方法二...
  • 一句话:isEmpty()此方法可以...判断字符串为以下几种方法: 1.是使用equals() 2.str.isEmpty(); 3.str.size()<=0 2.集合为 第一种方法: CollectionUtils.isEmpty(); CollectionUtils.isNotEmpty()..
  • java 判空工具类

    千次阅读 2018-11-14 14:14:16
    java中的一些类型进行判空的工具类: public class EmptyUtils { // 私有EmptyUtils构造类,让外界不能创建对象,只能静态调用方法 private EmptyUtils() { throw new UnsupportedOperationException("...
  • java 判空方式

    千次阅读 2014-03-13 18:56:34
    以下是 Java 判断字符串是否为的几种方法.  方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.  方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法.  方法三: Java SE 6.0 才开始提供的办法, ...
  • JAVA判空、null

    万次阅读 2012-07-23 09:40:16
    这是篇修改,今天(12-07-26)在博客园看到一篇关于null的文章,有所收获,回过头来看看前几天的判空问题,需要改进。 对JAVA中判定变量是否为空不了解,大家多指教指教。 经过测试,如果是对象类型(包括...
  • 在开发时我们常见的类型3种类型的判空分别是字符串,数字类型,集合的判空。 一开始对于这几种判空的方式就是很low,效率很低的那种。 对于字符转: 方法1:if(s == null || s.equals("")){逻辑…} 这种效率低 方法2...
  • java判空

    2019-10-20 13:09:37
    类型判空 1、int 在初始化的时候=0,使用0==a判断 int a = 0; if (0 == a) { System.out.println(true); } 2、Integer 初始化为null。 Integer a1 = null; if(a1==null){ System...
  • java.util.Objects 及内含的判空方法

    千次阅读 2019-05-10 14:27:19
    JAVA8 新的工具类,Objects里面拥有hash 判空 比较等方法
  • java String的判空方法算是java开发中的一个很基础的方法,但是自己有时候会忘记,所以写篇博客总结加深记忆。 方法一:是我所知道的效率的最高的,也是最常用的方法。 if(s == null || s.length() <= 0) 方法...
  • Java List判空详解

    千次阅读 2020-03-01 16:59:00
    Java List判空、字符串判空 1.List判空 在写Java程序的时候,常见就是List判空问题,程序一旦未判空就会出现空异常; 方法一: @Test void Test() { List<String> list = new ArrayList<>(); if...
  • Java——判空

    千次阅读 2018-09-04 20:55:32
      小菜今天整理了一下java判空方法,也查了些许资料,想简单整理一下分享给大家,如有不对的地方欢迎大家留言,帮助小菜更快的成长! StringUtils   StringUtils工具类是用来做字符串的操作的,小菜知道的...
  • 对象判空:http://www.ibloger.net/article/3209.html 字符串判空:https://blog.csdn.net/qq_34926773/article/details/85235110
  • java万能判空工具类-可直接使用-判空不用在单独写,全部调用这个工具类
  • java mybaties Integer 判空

    2021-01-21 19:39:42
    java mybaties Integer 判空java Integer 判空mybaties Integer 判空 java Integer 判空 Integer diyId = 5; String.valueOf(diyId).equals("") mybaties Integer 判空 <if test="diyId != null "> DIY_ID =...
  • java8 判空

    万次阅读 2019-05-24 18:16:51
    指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考【jdk 1.6Java.lang.Null.Pointer.Exception】 —— 为了不抛出这个异常,我们便会写...
  • java对象判空

    千次阅读 2019-07-24 06:49:04
    在实际书写代码的时候,经常会因为对象为,而抛出指针异常java.lang.NullPointerException 为了避免这种情况出现可以使用以下解决方式: 1、object != null 我们直到在 = 比较的是对象或者变量在内存中的地址,...
  • java最强大的判空工具类,可判断所有数据类型。简单易用
  • java String判空

    2019-02-27 11:35:26
     如果 String 类型为null, 而去进行 equals(String) 或 length() 等操作会抛出java.lang.NullPointerException.  并且s==null 的顺序必须出现在前面,不然同样会抛出java.lang.NullPointerException.  如下Java...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,428
精华内容 10,171
关键字:

java判空方法

java 订阅