数据类型
一、 数据类型分类
a)基本数据类型
八大基本数据类型
b)引用数据类型
数组,字符串,对象...
二、基本数据类型
数值型
整数型
byte类型
short类型
int类型
long类型
浮点型
float类型
double类型
字符型
char类型
布尔型
boolean类型
三、整数型
byte类型,1个字节,-128到127,-2^7到2^7-1 short类型,2个字节,-32768到32767,-2^15到2^15-1 int类型,4个字节,大概在正负21亿之间,-2^31到2^31-1 long类型,8个字节,非常大,-2^63到2^63-1 注意事项: 1)根据你需要存储的数据范围,来合理的选择使用数据类型。 避免存储的数据超出数据类型的表数范围。 例如:byte num = 128; 避免使用的数据类型不合适浪费内存空间。 补充:现实开发中,一般只使用int和long即可. 2)整数型固定值常量的默认类型是int类型。
3)在整数型固定值常量末尾添加“L”或“l”,那么该常量就变为了long类型常量了 建议:建议使用“L”,不建议使用“l” 4)关于整数型固定值常量还有哪些呢??? a)十进制固定值常量,例如:1, 2, 3, ... b)八进制固定值常量,例如:017, 011, ... c)十六进制固定值常量,例如:0x1A, ...
四、浮点型
float类型,4个字节,能精确到小数点后7位,单精度类型。 double类型,8个字节,精确度是float类型的两倍,双精度类型。 注意事项:
1)现实开发中,我们使用double类型较多。 2)固定值小数常量的默认数据类型为double类型。 3)在小数固定值常量默认添加“F”或“f”,那么该常量就变为了float类型的常量了 4)因为小数的存储方式不一样,那么最好不要对小数最非常精确的比较 5)小数的固定值常量有哪些??? 十进制小数常量,例如:12.34, 3.14, ... 使用科学计算法表示小数常量,例如:3.1E5, 3.1E-3 3.14E2,等效于:314.0,也就是小数点往右移动两位 3.14E-2,等效于:0.0314,也就是小数点往左移动两位
五、布尔型
常量值:true,false true: 代表真或条件成立 false: 代表假或条件不成立 布尔类型的使用场合: 常用于条件判断,例如:条件成立该做什么事,条件不成立又该做什么事。
六、字符型
char类型占用2个字节 常量:使用单引号包裹的一个字符,我们称之为字符常量。 字符串,String类型(后续会深入学习) 常量:使用双引号包裹的内容(可以是任意多个字符组成),我们称之为字符串常量。
字符串和别的数据类型做+运算,其实做的是拼接运算。 String str = "hello world" + 30; System.out.println(str); // 输出:"hello world30"
字符是如何存储在内存中的??? Unicode编码,占2个字节,可允许有65536个字符,一个中文字符在内存中占用2个字节。
七、数据类型转换
- 为什么需要数据类型转换??? 因为java是强类型语言,所以要求执行“赋值运算”和“算数运算”的时候,参与运算的数据类型必须保持一致。
- 基本数据类型转换的方式有哪些??? a)隐式类型转换,无需程序员手动处理 b)强制类型转换,需要程序员手动处理
- 那么基本数据类型可以相互转换??? 除了boolean类型之外,其余的数据类型在内存中存储的都是数值。 所以,除了boolean类型之外,其余的数据类型都可以相互转换。
八、隐式类型转换
原则:从低字节向高字节转换(提升)。 byte --> short --> int --> long --> float --> double char --> int
赋值运算:从低字节向高字节转换(提升)。 特例:把int类型常量赋值给byte、short和char类型的变量时, 属于自动类型转换的特例,只需不超出其表数范围即可。 条件: - int类型常量 - 不超出其表数范围
常见面试题: 1、byte b1 = 11; byte b2 = 12;byte sum = b1 + b2; 错误 原因:两个byte类型运算之后的结果为int类型 和int num1 = 100; int num2 = 300; int sum = num1 + num2; 如何确定以上代码是对的??? a)检查语法是否正确,编译 b)检查逻辑是否正确,解释执行,运行时
2、请问说出100000L100000100000 正确 和100000100000100000 // 错误
3、int num1 = 90000; int num2 = 90000; int total = num1 * num2; 请问total的结果是多少? - 不知道,因为81亿已经超出了int类型的表数范围,返回的结果是一个无意义的数
九、强制类型转换
- 什么时候需要强制类型转换??? 自动类型转换无法实现的时候,那么我们就使用强制类型转换。
- 强制类型转换的语法 语法:目标数据类型 变量名|常量名 = (目标数据类型)变量|常量;
- 强制类型转换的注意点 1)强制类型转换之后的数据的数据类型保持不变。 int num1 = 10; byte num2 = (byte)num1; // 此处强转之后num1依旧为int类型 2)如何把一个小数转换为整数???
int num2 = (int)123.45; 3)使用强制类型转换的时候需要慎重!!!可能会丢失精度。
int num1 = 128; byte num2 = (byte)num1; // 输出:-128