精华内容
下载资源
问答
  • java对象判空

    千次阅读 2019-07-24 06:49:04
    在实际书写代码的时候,经常会因为对象,而抛出指针异常java.lang.NullPointerException 为了避免这种情况出现可以使用以下解决方式: 1、object != null 我们直到在 = 比较的是对象或者变量在内存中的地址,...

    在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException
    为了避免这种情况出现可以使用以下解决方式:

    1、object != null
    

    我们知道在 = 比较的是对象或者变量在内存中的地址,引用对象(或者是不在堆上创建的对象,或者string类的变量)中存储的是栈上或者常量池的地址,= 虽然不是比较的自身的值,但是空引用对象也指向的为空,所以可以如此判断。
    2、如果是字符串可以使用

    string.length==0
    
    展开全文
  • java对象判空时需使用null == obj。不能使用obj.equals(null),因为我们判的前提是对象可能是null,null去调用equals方法显然是会抛出指针异常。举例如下: package demo; public class ObjectEqualsDemo { ...

    java对象判空时需使用null == obj。不能使用obj.equals(null),因为我们判空的前提是对象可能是null,null去调用equals方法显然是会抛出空指针异常。举例如下:

    package demo;
    
    public class ObjectEqualsDemo {
    
        public static void main(String[] args) {
            Object obj = getObj(0);
            System.out.println(obj.equals(null));
            System.out.println(obj == null);
            System.out.println(null == obj);
    
        }
    
        public static Object getObj(int i) {
            if (i == 0) {
                return null;
            } else {
                return new Object();
            }
    
        }
    }

    当getObj(0),obj为null时,打印结果如下:

    Exception in thread "main" java.lang.NullPointerException
        at demo.ObjectEqualsDemo.main(ObjectEqualsDemo.java:7)

    当getObj(1),obj不为null时,打印结果如下:

    false
    false
    false

     

    展开全文
  • Java 优雅判空方法

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

    为了避免 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());
        }
    }
    
    展开全文
  • 最近代码走查,讨论到数组判空,正好整理一下,记录一下不同数据类型判空方式! 一、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 或者空数组。这个我感觉还挺方便的!

    看他的源码:

     

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

     

     

         

    展开全文
  • * 重写对象的equals方法等 * @param obj * @return */ @Override public boolean equals (Object obj) { //如果引用指向的为同一个对象,则返回true if ( this ==obj){ return true; ...
  • 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判空方法 一:java判断字符串是否为方法总结 方法一:开发中最常用的方法,看起来也比较高大上: if(StringUtils.isNotBlank(str))//判断字符串不为 或if(StringUtils.isBlank(str))//判断字符串为 ...
  • java万能判空工具类-可直接使用-判空不用在单独写,全部调用这个工具类
  • 1.对象或者字符串为 引入包:org.springframework.util StringUtils.isEmpty(Object str); 判断字符串为以下几种方法: 1.是使用equals() 2.str.isEmpty(); 3.str.size()<=0 2.集合为 第一种方法...
  • StringUtils   spring以及springboot项目是经典的web...下面是判空以及对于一些没有实际意义的字符串的判断 System.out.println(StringUtils.hasText(null)); // false System.out.println(StringUtils.hasText(""));
  • java判空

    2019-11-04 16:21:05
    java等似乎很简单,==用来判断对象引用(内存地址)是否相同,equals用来判断值是否相同。你可以试用String对象轻松区分这一点。 那么在null等(也就是判空操作)时呢? 可以通过如下代码明白两个等的比较:...
  • java8 判空

    万次阅读 2019-05-24 18:16:51
    指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考【jdk 1.6Java.lang.Null.Pointer.Exception】 —— 为了不抛出这个异常,我们便会写...
  • 1.使用 org.apache.commons.collections 包中的 CollectionUtils 的方法来检查集合是否为 empty or null ArrayList<Integer> arr=new ArrayList<>(); CollectionUtils.isEmpty(arr); ArrayList<...
  • 一般取对象某个属性要这么写,以防中间某个属性...下面写了个方法,对属性做了判空 function getValue(data, keysString) { if(!data){ return undefined } if(!keysString){ return data } // [0],[1]... 属
  • java中对对象进行判空的操作 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的; 另一种是org.springframework.util包下的。这两种StringUtils工具类判断对象是否为是有差的 org....
  • java.util.Objects 及内含的判空方法

    千次阅读 2019-05-10 14:27:19
    JAVA8 新的工具类,Objects里面拥有hash 判空 比较等方法
  • Java中的集合类与对象判空

    千次阅读 2017-08-28 14:26:57
    //判断关联的积分项是否为,若不为,则插入数据库 if(pointsItemList != null &amp;&amp; !pointsItemList.isEmpty()){ ~~~ }!= null 与 !isEmpty()就如前人所说的杯子与水: ①!= null是为了判断...
  • java常用判空工具类

    2019-03-23 18:17:38
    判断是否为工具类。 /** * ================================================== * <p> * FileName: EmptyCheck * * @author : shihongwei * @create 2018/8/30 * @since 1.0.0 * 〈功能〉:...
  • Java中的集合类与对象判空(转载修改部分内容) 路径:https://blog.csdn.net/yuzhengfei7/article/details/77648375 一、String 对象判空 a.判定空对象:String s = null; 定义:  空对象是指定义一个...
  • 对象、String判空

    2019-08-05 23:04:06
    判空分为两种:对象类型的判空,String类型的判空 对象类型的判空 null == user StringUtil.isNullorEmpty(); StringUtil.isNotEmpty() StringUtil.isEmpty() 字符串判空 1、if(null == s || "".equals(s)); ...
  • java 判空工具类

    千次阅读 2018-11-14 14:14:16
    java中的一些类型进行判空的工具类: public class EmptyUtils { // 私有EmptyUtils构造类,让外界不能创建对象,只能静态调用方法 private EmptyUtils() { throw new UnsupportedOperationException("...
  • 一、导语 在没有用Optional判空之前,你是否也像下面的代码一样判空呢?如果是,请往下看,Optional 相对...如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T
  • java 字符串判空的常见的判断方法

    千次阅读 2019-08-23 10:38:20
    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上...这篇文章主要从==和equals的区别然后延伸到开发中字符串判断是否是(null)或字符串("")的讲解。 正文:一、java中操作符"=="的作用...
  • JAVA判空、null

    万次阅读 2012-07-23 09:40:16
    这是篇修改,今天(12-07-26)在博客园看到一篇关于null的文章,有所收获,回过头来看看前几天的判空问题,需要改进。 对JAVA中判定变量是否为不了解,大家多指教指教。 经过测试,如果是对象类型(包括...
  • JAVA String字符串判空

    千次阅读 2018-12-24 16:47:37
    正确的写法: "".equals(str) 或 str == null || str.equals("") ...null表示这个字符串不指向任何的东西,那么没有是否为的问题,因为引用的实例对象都没有。这时候...
  • Java 判断String对象是否为方法

    千次阅读 2018-06-09 08:47:42
    String对象中有一个isEmpty的方法判断是否为,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用string.isEmpty()会报指针异常(NullPointerException)判断一个String为的最安全...
  • Java中判断String对象是否为方法 Java原生的方法: String对象中有一个isEmpty的方法判断是否为,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用string.isEmpty()会报指针...
  • 以下是Java 判断字符串是否为的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||”“.equals(s)); 方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法: if(s == null ...
  • java-JVM中对象判

    2016-12-08 14:36:39
    我们对java有了解的都知道,当一个对象没有引用指向它时,虚拟机会在GC的时候会回收掉分配的内存,其实这样说是不准确的,下面我就详细的说一下,虚拟机是怎么样判断一个对象还是活着的,即对象判活问题,当我们遇到...
  • I . 单例的懒汉式与恶汉式 ... Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 V . Kotlin 伴生对象 ( companion object ) VI . ? 与 !! 作用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,607
精华内容 8,642
关键字:

java对象判空的方法

java 订阅