数据类型
java是一门强类型语言,所有的数据都有其指定的类型。
java中数据类型的分布:
基本数据类型:
数值型
整数型
字节型: byte
短整型:short
整形:int
长整型:long
浮点型
单精度:float
双精度:double
逻辑型
boolean:
字符型
char:
引用类型: 类 接口 数组
数据类型 | 符号 | 所占空间 | 数据范围 |
---|---|---|---|
字节型 | byte | 1字节 | -128~127 |
短整型 | short | 2字节 | + - 3W |
整型 | int | 4字节 | + - 21亿 |
长整型 | long | 8字节 | 负的2的63次方~2的63次方-1 |
双精度 | double | 8字节 | 小数点后15-16位 |
单精度 | float | 4字节 | 小数点后6位 |
字符型 | char | 2字节 | 0-65536 |
布尔型 | boolean | 1位 | ture or false |
实际上布尔类型所占空间为1字节
整型:
public class Demo{
public static void main(String[] args){
//1:声明一个byte类型的变量
byte num = 120;
System.out.println("byte类型的变量num的值是:num="+num);
//2:声明一个short类型的变量
short sh = 10000;
System.out.println("shrot类型的变量sh = "+sh);
//3:声明一个int类型的变量
int in = 123456789;
System.out.println("int类型的变量in = "+in);
//4:声明一个long类型的变量
long l = 12345678900L;
System.out.println("long类型的变量l = "+l);
}
}
整型通常会出现的错误:
超过byte范围的数据无法正常给byte数据类型赋值
超过short范围的数据无法正常给short数据类型赋值
所有的整数默认的数据类型是int,当把超过int范围的字面值
赋值给long类型变量时,需要在字面值后加"l"或者"L",建议用"L"
注意当给byte和short赋值时,只要数值不超过byte和short的
取值范围,就可以正常赋值。
对于某些特别大的整数值,long类型也是无能为力的。
后期通过BigDecimal、BigInteger去存储。
浮点型:
public class Demo{
public static void main(String[] args){
//声明一个小数
double d = 3.12;
System.out.println(10/3.0);
//声明一个小数
float f = 3.12F;
System.out.println(f);
double num = 0.3;
System.out.println(num==(0.1+0.2));
//System.out.println(10/0);
System.out.println(10/0.0);
System.out.println(-10/0.0);
System.out.println(-0.0/-0.0==0.0/0.0);// NaN非数 一个自己和自己不相等
}
}
浮点型数据类型注意事项:
java中的小数默认类型是double,当把一个double类型的字面值
赋值给float变量存放的时候,要在字面值后加"F"或者"f"
System.out.println(10/0.0); 正无穷
System.out.println(-10/0.0); 负无穷
0.0/0.0为NaN
System.out.println(-0.0/-0.0==0.0/0.0); false
NaN:表示未定义或不可定义的值,NaN不等于任何数。
类型转换
自动转换:
自动转换是按字节数由小到大进行转换的
byte-->short-->int-->long-->float-->double
除了long转为float是字节数由大转小
而char类型的数据可以从int类型开始自动转换
布尔类型不可以进行数据转换
public class Demo{
public static void main(String[] args){
//声明一个byte类型的变量
byte b = 12;
// 声明一个int类型的变量存放byte类型的数据
int num = b;//把变量b中的值赋值给int类型的变量num存放
//声明一个boolean类型的变量
boolean f = true;
//num = f;
//声明一个char类型
char ch = 'a';
num = ch;
System.out.println(num);
}
}
强制转换:
强制转换有一定的风险,容易丢失数据,所以强制转换需要谨慎。
小数据类型 变量名 = (小数据类型)大数据类型的变量。
如果大数据类型变量的数据超过了小数据类型的数据范围,那么结果就会出现问题。
public class Demo05{
public static void main(String[] args){
//创建一个int类型的变量
int num1 = 100;
//将int类型的值赋值给byte
byte result1 = (byte)num1;
System.out.println(result1);
//创建一个int类型的变量
int num2 = 300;
//将int类型的值赋值给byte
byte result2 = (byte)num2;
System.out.println(result2);
}
}