首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Guava 指南 之「使用和避免 null」

使用和避免null “null,糟糕透啦!” —— Doug Lea. “我称null为百亿美金的错误!” —— C. A. R. Hoare....轻率地使用null可能导致很多令人惊愕的问题。通过研究谷歌的代码,我们发现:95% 的集合不接受null作为元素,因此相比于默默地接受null,使用快速失败的操作拒绝null值对开发者更有帮助。...例如,在内存和速度方面,null就是廉价的,而且在对象数组中,出现null也是不可避免的。但是相对于库来说,在应用代码中,null往往是导致混乱、疑难问题和含义模糊的根源。...最关键的是,null根本就没有给出空值到底意味着什么。 正是由于这些原因,很多的 Guava 工具类都被设计为针对null是快速失败的,除非工具类本身对null是友好的。...此外,Guava 提供了很多工具类,可以让我们在必须使用null时用起来更简单,也可以让我们避免使用null.

92770
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在Java中如何避免“!=null”式的判空语句?

    我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPointerException。...= null) { someobject.doCalc(); } 这么些我是为了避免抛NullPointerException异常,我不知道这个对象是不是空的。...换句话说,有两种情况会出现判空语句: null返回值按找约定是正常的返回值 null返回值不是正常的返回值 第二种情况很简单。...如果你对你调用的代码没有控制权的话,你就惨了。如果null返回值是正常的话,那你就必须去检查它了。 如果可以控制你调用代码(当然常常还是有控制权的),那就是另一回事儿了。...还是尽量的不去使用null返回值。对于返回集合的方法很简单,只需要返回空的集合就可以了,而不是null。 对于返回值不是集合的方法,就要麻烦一点了。

    2.2K10

    在Java中如何避免“!=null”式的判空语句?

    我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPointerException。...= null) { someobject.doCalc(); } 这么些我是为了避免抛NullPointerException异常,我不知道这个对象是不是空的。...换句话说,有两种情况会出现判空语句: null返回值按找约定是正常的返回值 null返回值不是正常的返回值 第二种情况很简单。...如果你对你调用的代码没有控制权的话,你就惨了。如果null返回值是正常的话,那你就必须去检查它了。 如果可以控制你调用代码(当然常常还是有控制权的),那就是另一回事儿了。...还是尽量的不去使用null返回值。对于返回集合的方法很简单,只需要返回空的集合就可以了,而不是null。 对于返回值不是集合的方法,就要麻烦一点了。

    3.4K20

    在Java中如何避免“!=null”式的判空语句?

    我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPointerException。...= null) { someobject.doCalc(); } 这么些我是为了避免抛NullPointerException异常,我不知道这个对象是不是空的。...换句话说,有两种情况会出现判空语句: null返回值按找约定是正常的返回值 null返回值不是正常的返回值 第二种情况很简单。...如果你对你调用的代码没有控制权的话,你就惨了。如果null返回值是正常的话,那你就必须去检查它了。 如果可以控制你调用代码(当然常常还是有控制权的),那就是另一回事儿了。...还是尽量的不去使用null返回值。对于返回集合的方法很简单,只需要返回空的集合就可以了,而不是null。 对于返回值不是集合的方法,就要麻烦一点了。

    5.3K10

    Java中的自动拆装箱、装箱缓存

    基本数据类型与包装类之间的转换过程就涉及到了自动拆装箱。 ...基本数据类型转换为包装类的过程称作自动装箱包装类转换为基本数据类型的过程称作自动拆箱  自动拆装箱的实现原理  举一个栗子:  public class AutoBoxing {     public...int/Integer相同, 自动装箱都是通过包装类的valueOf()方法来实现的, 自动拆箱都是通过包装类对象的xxxValue()来实现的 什么时候用到自动拆装箱  赋值操作时  Integer...,但是在使用自动拆装箱时也有很多翻车现场,最容易出现的就是空指针,所以在使用自动拆装箱时一定要防止空指针。 ...自动装箱过程中涉及到对象的创建等操作,如果在循环体中大量的拆装箱操作,势必会浪费资源,所以何时使用合理的使用自动拆装箱是尤为重要。

    56930

    SQL中IS NOT NULL与!=NULL的区别

    大家好,又见面了,我是你们的朋友全栈君。 平时经常会遇到这两种写法:IS NOT NULL与!=NULL。也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合。...默认情况下,推荐使用 IS NOT NULL去做条件判断,因为SQL默认情况下对WHERE XX!= Null的判断会永远返回0行,却不会提示语法错误。 这是为什么呢?...SQL Server文档中对Null值的比较运算定义了两种规则,如在SQL Server 2000中: 规则一是是ANSISQL(SQL-92)规定的Null值的比较取值结果都为False,既Null...= null来进行条件判断,需要加上这个命令语句:SET ANSI_NULLS OFF,这时数据库进入ANSI SQL非标准模式,你会发现IS NOT NULL 和 != null 是等效的了。...另外SET ANSI_DEFAULTS [ON/OFF]命令也可以实现标准的切换,只是这个命令控制的是一组符合SQL-92标准的设置,其中就包括Null值的标准。

    2.2K30

    oracle中is not null,oracle之is null和is not null的优化「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君 oracle之优化is null语句 一:is null的优化 方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。...具体实现条件则是:i is null j = nvl(i,j); 注意:使用时必须要确保字段的数据不包含j,例如:(age,15)=15,此时有可能age 内容是15,此时不可以,j的值要变换...当然还有另外一种方式解决这个问题:将null包含到索引中 –使用nvl函数的方式(不用添加索引,推荐) select * from student t where 1=nvl(t.age,1); –当t.age...不存在等于1的数据时等价于 –select * from student t where t.age is null; –添加索引的方式 create index idx_age_x on tab_i(...decode(age,null,1)); select * from student t where decode(t.age,null,1)=1; 二:is not null的优化 方法:结果集不包含

    3.5K31

    关于null的操作

    空值     空值一般用NULL表示     一般表示未知的、不确定的值,也不是空格     一般运算符与其进行运算时,都会为空     空不与任何值相等     表示某个列为空用:IS NULL  不能使用...的优先级是:F ->NULL ->T     OR运算:     T OR T =T     T OR F =T     T OR NULL =T     F OR T =T     F OR F =F...->F     NOT运算:        NOT T =F        NOT F =T        NOT NULL IS NULL  与空值相关的函数:     NVL 函数        格式...,表达式n)        作用:返回第一个不为空的值,如果所有的都为空,则返回NULL。...上面这段SQL的作用是,当SEX为0时(这里代表女性),返回NULL。

    77870

    自相矛盾:Null is Not Null引发的成本误区

    在SQL的世界里,总有一些情况是你意想不到的,以下这个案例可以让你理解这样一种情况。 这是一个开发者请求分析的一个SQL,原因是执行计划很让人费解。...,第二步骤处有一个过滤谓词信息,这是优化器自动添加上去的,其判定为NULL IS NOT NULL,这显然是一个恒假的条件....根据这个条件,Oracle无需执行所有SQL,直接返回,这也就是无论执行计划树的成本是多少,最终过滤的成本总是0,SQL无需真正执行。 那么为什么会有这样一个始终为False的条件呢?...,最终确认是程序员的疏忽导致的错误编码。...在程序的世界里,什么事情都可能发生,所以在开发过程中进行必要的SQL审核,不可缺少。

    72540

    关于 JavaScript 的 null 和 undefined,判断 null 的真实类型

    null、undefined undefined:表示一个变量最原始的状态,而非人为操作的结果 null:表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 《JavaScript高级程序设计...null 有属于自己的类型 Null,而不属于Object类型,typeof 之所以会判定为 Object 类型,是因为JavaScript 数据类型在底层都是以二进制的形式表示的,二进制的前三位为 0...判断 null、undefined 数据类型 获取 null 的真实类型: 1 Object.prototype.toString.call(null); // [object Null] 通过 Object...ECMAScript 规范认为,既然 null 和 undefined 的行为很相似,并且都表示 一个无效的值,那么它们所表示的内容也具有相似性,即有 1 null == undefined; //...在比较相等性的时候,不会主动转换分项的数据类型,而两者又不属于同一种类型: 1 null === undefined; // false,类型不相同 2 null !

    1.6K20

    Java中的自动装箱与拆箱

    自动装箱的弊端 自动装箱有一个问题,那就是在一个循环中进行自动装箱操作的情况,如下面的例子就会创建多余的对象,影响程序的性能。...因此在我们编程时,需要注意到这一点,正确地声明变量类型,避免因为自动装箱引起的性能问题。 重载与自动装箱 当重载遇上自动装箱时,情况会比较有些复杂,可能会让人产生有些困惑。...容易混乱的对象和原始数据值 另一个需要避免的问题就是混乱使用对象和原始数据值,一个具体的例子就是当我们在一个原始数据值与一个对象进行比较时,如果这个对象没有进行初始化或者为Null,在自动拆箱过程中obj.xxxValue...所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作。...如想了解垃圾回收和内存优化,可以查看本文Google IO:Android内存管理主题演讲记录 总的来说,自动装箱和拆箱着实为开发者带来了很大的方便,但是在使用时也是需要格外留意,避免引起出现文章提到的问题

    73020
    领券