话不多说先上图
取值范围与大小
类型 | 默认值 | 占用存储空间/字节 | 范围 | 包装类 |
byte | 0 | 1 | -128~127(-2的7次方到2的7次方-1)(1.8) | Byte |
short | 0 | 2 | -32768~32767(-2的15次方到2的15次方-1) | Short |
int | 0 | 4 | -2147483648~2147483647(-2的31次方到2的31次方-1) | Integer |
long | 0L | 8 | -9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1) | Long |
float | 0.0f | 4 | 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样 ,e-45表示乘以10的负45次方) | Float |
double | 0.0d | 8 | 1.797693e+308~ 4.9000000e-324 | Double |
char | '' | 2 | \u0000~\uFFFF | Char |
boolean | false | 1/8 | false、true | Boolean |
包装类才有ToString()方法
从左向右转换都是隐私转换,从右向左要进行强制类型转换,但是强制转换会丢失精度
基本类型:存储在栈中,存储速度比较快些
其他均为引用类型放在堆中,具体详见(JVM内存模型)
包装类的拆箱与装箱
(在JDK1.5之后,提供了自动装箱和自动拆箱功能)
装箱:将基本数据类型变为包装类 拆箱:将一个包装类变为基本数据类型
1)Integer ,Byte,Float,Double,Short,Long都属于Number类的子类,Number类本身提供了一系列的返回
以上六种基本数据类型的操作。
2)Character、Boolean属于Object子类。
Number类的作用
那么Number类是一个抽象类,主要是将数字包装类中内容变成基本数据类型。
主要操作方法如下:
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
public byte byteValue() {return (byte)intValue();}
public short shortValue() {return (short)intValue();}
在面试中可能会遇到基本类型与包装类相比会用到以下知识点
(在Java中,byte的取值范围是-128到127之间。在自动包装和拆箱中,如果变量取值范围在byte的范围内,在自动包装和拆装过程中就不新创建对象(堆内存);如果范围不在byte取值范围内,就会新创建Integer对象。)