为什么阿里巴巴不建议你 boolean 类型变量用 isXXX

为什么boolean不用isXxx

package hidisan;

public class isXXX {
    private String isHot;
    public String getIsHot() {
        return isHot;
    }

    private boolean isHOt;
    public boolean isHOt() {
        return isHOt;
    }

    // boolean类型
    private boolean hot;
    public boolean isHot() {
        return hot;
    }

    // 包装类型
    private Boolean hot1;
    public Boolean getHot1() {
        return hot1;
    }

    private Boolean isHot0;
    public Boolean getHot0() {
        return isHot0;
    }
  
}

boolean类型isHot的 setter() 的方法名就叫 isHot()

boolean类型hot的 setter() 的方法叫isHot()

Boolean类型isHot的 setter() 的方法叫getHot()

阿里巴巴发布的java开发手册中就写明了,强制规定,布尔类型的数据,无论是boolean还是Boolean都不准使用isXXX来命名,负责部分框架解析会引起序列化错误。

定义为基本数据类型Boolean isXxx 的属性,他们的方法也是isXxx(),RPC框架在反向解析的时候,以为对应的属性名是 xxx,导致属性获取不到,进而抛出异常。

  • 对于非boolean类型的参数,getter和setter方法命名的规范是以get和set开头
  • 对于boolean类型的参数,setter方法是以set开头,但是getter方法命名的规范是以is开头
  • 包装类自动生成的getter和setter方法的名称都是getXXX()和setXXX()

其实javaBeans规范中对这些均有相应的规定,基本数据类型的属性,其getter和setter方法是getXXX()和setXXX,但是对于基本数据中布尔类型的数据,又有一套规定,其getter和setter方法是isXXX()和setXXX。但是包装类型都是以get开头

Ps: Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。

包装类型可以为 null,而基本类型不可以

包装类型可以应用于 POJO 中,而基本类型则不行
POJO:简单无规则的 Java 对象,只有属性字段以及 setter 和 getter 方法

为什么 POJO 的属性必须要用包装类型?

数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

基本类型和包装类型的总结

  • 基本类型的优势:数据存储相对简单,运算效率比较高
  • 包装类的优势:有的容易,比如集合的元素必须是对象类型,满足了java一切皆是对象的思想
  • 声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
  • 存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
  • 初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null
  • 使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到

1、包装类型可以为 null,而基本类型不可以

2、包装类型可用于泛型,而基本类型不可以

3、基本类型比包装类型更高效:基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用

img

4、把基本类型转换成包装类型的过程叫做装箱
反之,把包装类型转换成基本类型的过程叫做拆箱

Integer chenmo = new Integer(10);  // 手动装箱
int wanger = chenmo.intValue();  // 手动拆箱

Integer chenmo  = 10;  // 自动装箱
int wanger = chenmo;     // 自动拆箱
等价于
=>
Integer chenmo = Integer.valueOf(10);
int wanger = chenmo.intValue();
//当需要进行自动装箱时,如果数字在 -128 至 127 之间时,会直接使用缓存中的对象,而不是重新创建一个对象  Integer缓存问题

建议POJO中使用包装数据类型,局部变量使用基本数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值