java基础02-数据类型,类型转换
Java语言的数据类型分为两种:基础数据类型和引用数据类型。
类型名称 | 关键字 | 占用内存 | 取值范围 | 区间 |
---|---|---|---|---|
字节型 | byte | 1 字节 | -128~127 | -27~27-1 |
短整型 | short | 2 字节 | -32768~32767 | -2 15~2 15-1 |
整型 | int | 4 字节 | -2147483648~2147483647 | -2 31~231-1 |
长整型 | long | 8 字节 | -9223372036854775808L~9223372036854775807L | -2 63~263-1 |
单精度浮点型 | float | 4 字节 | +/-3.4E+38F(6~7 个有效位) | |
双精度浮点型 | double | 8 字节 | +/-1.8E+308 (15 个有效位) | |
字符型 | char | 2 字节 | ISO 单一字符集 | |
布尔型 | boolean | 1 字节 | true 或 false |
所有基本数据类型的大小(所占用的字节数)都已明确规定,在各种不同的平台上保持不变,这一特性有助于提高 Java 程序的可移植性。-27~27-1
-
引用数据类型建立在基本数据类型的基础上,包括数组、类和接口引用数据类型是由用户自定义,用来限制其他数据的类型。另外,Java 语言中不支持 C++ 中的指针类型、结构类型、联合类型和枚举类型。
Java 是一种强制类型的语言,所有的变量都必须先明确定义其数据类型,然后才能使用。Java 中所有的变量、表达式和值都必须有自己的类型,没有“无类型”变量这样的概念。
注:
-
对于long型值,若赋的值大于或小于int型的最大最小值时,要在数字后面加L或l,表示该数值为长整型,如 long num = 42345155L。
-
默认情况下,小数都被看做double型。
-
在自定义字符型变量时,要以单引号表示,如 's' 表示一个字符,而 "s" 表示一个字符串。
-
布尔类型通常被用在流程控制中,作为判断条件。
-
拓展
-
整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i1 = 0b10;
int i2 = 007; // 八进制0
int i3 = 0x10; // 十六进制0x 0~9 A~F
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
返回值:
10
2
7
16-
浮点数拓展
// float 有限 离散 舍入误差 大约 接近但不等于
// 最好完全避免使用浮点数进行比较
// 使用BigDecimal 数学工具类 如 银行业务
float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f == d); // false
System.out.println(f);
System.out.println(d);
System.out.println("=============");
float d1 = 2333333333333f;
float d2 = d1 + 1;
System.out.println(d1 == d2); // true-
字符拓展
// 所有的字符本质还是数字
// java采用Unicode编码格式 0~65536
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1); //强制转换 97
System.out.println(c2);
System.out.println((int)c2); //强制转换 20013-
布尔值拓展
boolean flag = true;
if (flag==teur){}
if (flag){} //等价
// Less is More! 代码要精简易懂 -
类型转换
如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功;而把高精度数据类型想低精度数据类型转换时, 则会有信息丢失,可能失败。
数据类型转换有两种方式,即隐式转换与显示转换
隐式类型转换
小容量向大容量转换,称为自动类型转换,容量从大到小(布尔类型除外)
byte,short,char--> int --> long --> float --> double
显示类型转换
大容量向小容量转换,要加起那个纸烈性转换符 (类型名)要转换的值
-
拓展
// 操作比较打的数的时候,注意溢出问题
// JDK7 之后,数字之间可以用下划线分割
int m = 10_0000_0000;
int y =20;
int t = m*y; // -1474836480 , 计算的时候溢出了
long t2 = m*y; // -1474836480 ,默认是int,转换前求已经存在问题了
long t3 = m*((long)y);
System.out.println(t3); -