八种基本数据类型
基本数据类型有八种,分为三大类(数值型,字符型,布尔型)
数值型
数值型分为两类(整型,浮点型)
整型
byte
- byte8位的数据类型,占用1个字节
- 默认值:0
- 最小值:-128 (-2^7)
- 最大值:127 (2^7-1)
byte bMaxValue = Byte.MAX_VALUE;
byte bMinValue = Byte.MIN_VALUE;
System.out.println("最大值:" + bMaxValue);
System.out.println("最小值:" + bMinValue);
short
- short16位的数据类型,占用2个字节
- 默认值:0
- 最小值:-32768(-2^15)
- 最大值:32767(2^15-1)
short sMaxValue = Short.MAX_VALUE; short sMinValue = Short.MIN_VALUE; System.out.println("最大值:" + sMaxValue); System.out.println("最小值:" + sMinValue);
int
- int32位的数据类型,占用4个字节
- 默认值:0
- 最小值:-2,147,483,648 (-2^31)
- 最大值:2,147,483,647 (2^31-1)
int iMaxValue = Integer.MAX_VALUE; int iMinValue = Integer.MIN_VALUE; System.out.println("最大值:" + iMaxValue); System.out.println("最小值:" + iMinValue);
long
- long64位的数据类型,占用8个字节
- 默认值:0L或者0l ==l容易与数字1混淆,建议使用大写L==
- 最小值:-9,223,372,036,854,775,808 (-2^63)
- 最大值:9,223,372,036, 854,775,807 (2^63-1)
long lMaxValue = Long.MAX_VALUE; long lMinValue = Long.MIN_VALUE; System.out.println("最大值:" + lMaxValue); System.out.println("最小值:" + lMinValue);
浮点型
float
- float32位数据类型,占用4字节
- 单精度赋值时数字后必须加F或者f
- 最小值:3.4e-45
- 最大值:1.4e38
-
不能表示精确的值
float fMaxValue = Float.MAX_VALUE; float fMinValue = Float.MIN_VALUE; System.out.println("最大值:" + fMaxValue); System.out.println("最小值:" + fMinValue);
double
- double64位数据类型,占用8字节
- 单精度赋值时数字后最好加上D或者d
- 最小值:4.9e-324
- 最大值:1.8e308
-
不能表示精确的值
double dMaxValue = Double.MAX_VALUE; double dMinValue = Double.MIN_VALUE; System.out.println("最大值:" + dMaxValue); System.out.println("最小值:" + dMinValue);
字符型
char
- char类型是一个单一的 16 位 Unicode 字符,占用两个字符
- 最小值: \u0000(即为0)
- 最大值:\uffff(即为65,535
- 可以存储任何字符
char cMaxValue = Character.MAX_VALUE; char cMinValue = Character.MAX_VALUE; System.out.println(cMaxValue); System.out.println(cMinValue);
布尔型
boolean
- boolean布尔类型,占用1个字节
- 只有两个值:true,false
boolean bt = Boolean.TRUE; boolean bf = Boolean.FALSE; System.out.println(bt); System.out.println(bf);
类型转换
boolean类型比较特殊不可以转换成其他类型
类型转换大小,指的是取值范围的大小
自动类型转换
由低级别转到高级别,是属于自动类型转换。
(byte,short,char) < int < long < float < double
byte b = 10;
short s = b;
int i = s;
long l = i;
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
强制类型转换
由高级别转为低级别,则需要强制转换。
类型转换是根据类型的取值大小来区分自动或强制的。所以强制类型转换时一定要注意取值范围,如果超出取值范围则会溢出。
==溢出时候不会抛出异常,也不会有任何提示==
强制类型转换时要注意精度丢失问题。
//超出取值范围
int shortMax = 32769;
short s = (short) shortMax;
System.out.println(s);
//精度丢失
double d = 99.999;
float f = (float) d;
int i = (int) d;
long l = (long) d;
System.out.println(d);
System.out.println(f);
System.out.println(i);
System.out.println(l);
类型提升
多种数据类型的表达式中,类型会向取值范围大的数据类型提升
long a = 100000000;
int b = 1999;
long c = a * b;
int c1 = (int) (a * b);
System.out.println(c);
System.out.println(c1);
装箱拆箱
包装类
将基本类型包装起来,使基本类型拥有对象的性质。
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
自动拆箱与自动装箱
Integer integer = 10; //自动装箱
// Integer integer = new Integer(10); jdk1.5之前写法
int in = integer; //自动拆箱
System.out.println(integer);
System.out.println(in)
//查看class文件源码后
Integer integer=Integer.valueOf(10);
int i=integer.intValue();
自动装箱是通过
valueOf()
方法实现,自动拆箱则是通过intValue()
实现。
同理可查看其他几种基本类型。