前言
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
一、基本数据类型分类
4类八种
1.整数型
- byte 占一个字节 -128到127【记住】
- short 占两个字 -2^15~2^15-1d
- int 占四个字节 -2^31~2^31-1 整数的默认类型是int
- long 占八个字节 -2^63~2^63-1
**注意事项:**
在定义long类型时候,推荐在long类型的值后面加特殊的标识(l或者L,推荐使用L)
*浮点型
- float 占四个字节 -3.403E38~3.403E38
单精度浮点型,占内存:4个字节,精度:科学记数法的小数点后6~7位
- double 占八个字节 -1.798E308~1.798E308 小数的默认类型是double
双精度浮点型,占内存:8个字节,精度:科学记数法的小数点后15~16位
字符型
- char 占两个字节 0~65535 char类型 取的数值 代表的是码表值
- 具有数字和字母双重特性,能够进行数学运算(a+1)
- 允许使用转义字符'\'将其后的字符转变为其他的含义,例'\n'
布尔型*
计算机中
true底层使用1表示
false底层使用0表示
二、基本数据类中转换
在Java程序中,不同的基本数据类型的值经常需要进行相互转换。
Java语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种转换方式:自动类型转换和强制类型转换。
boolean类型不参与。
1.自动类型转换(隐式类型转换)
将取值范围小的类型
自动提升为取值范围大的类型
Java中的默认转换规则:
- byte short char 运算过程中 自动提升为 int
- 取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为其中最大的类型,再运算。
只是在运算过程中,把小的转换为大的然后去运算,但是并不改变小的本身的数据类型
示例代码:
class Demo3_DataTypeConversion { // Conversion转换
public static void main(String[] args) {
// 数据类型转换之隐式转换
int x = 3;
byte b = 4;
x = x + b; // b类型从byte自动提升为int,再进行运算
System.out.println(x);
long l = 88L;
l = l + b; // b类型从byte自动提升为int,遇到long类型又自动提升为long类型,再进行运算
System.out.println(l);
}
}
2.强制类型转换(显示类型转换)
将取值范围大的类型
强制转换成取值范围小的类型
强制转换问题
int a = 10;
byte b = 20;
b = a + b; //有问题,错误: 可能损失精度
强制转换格式
目标类型 变量名=(目标类型)(被转换的数据);
示例:
int a = 10;
byte b = 20;
b = (byte)(a + b); // 强制转换
需注意事项
如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同。
byte b = (byte)(127 + 1);
结果是什么?//-1
将1.5
赋值到int
类型变量会发生什么?产生编译失败,肯定无法赋值。
int i = 3.14; // 错误
想要赋值成功,只有通过强制类型转换,将double
类型强制转换成int
类型才能赋值。
补充
基本数据类型与字符串类型的转换
-
基本数据类型与字符串类型的转换
- 任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型 - 但是String类型不能通过强制类型()转换,转为其他的类型
-
示例代码
System.out.println("" + 1 + 2);//成功的,结果为12 String str = "123"; int num = (int)str;//错误的 int num = Integer.parseInt(str); Integer in = new Integer(str); int num1 = in;//这里是自动拆箱 Integer in1 = Integer.valueOf(str); //以上用到的是包装类和str的转化.
-