为什么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、基本类型比包装类型更高效:基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用
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缓存问题