目录
- 1 变量
- 1.1 什么是变量?
- 1.2 声明变量
- 1.2 变量的原理
- 2 数据类型
- 2.1 基本数据类型
- 2.1.1 取值范围公式
- 2.1.2 整型
- 2.1.3 浮点型
- 2.1.4 字符型
- 2.1.5 布尔型
- 2.2 引用数据类型
- 2.2.1 数组[]
- 2.2.2 类class
- 2.2.3 接口interface
- 3 数据类型转换
- 3.1 自动类型转换
- 3.2 强制类型转换
- 3.3 String与基本数据类型相互转换
1 变量
1.1 什么是变量?
- 变量表示内存中的一个存储区域,不同数据类型的变量,占用的空间大小不同。
- 变量的三要素:数据类型+变量名+值
- 同一作用域内变量不能重名
1.2 声明变量
- 先声明,再赋值:
int num; num = 1;
- 同时声明赋值:
int num = 1;
- 注意:
- 局部变量必须赋初始值。
- 类的成员变量可以不赋初值,创建类对象时自动赋默认初始值。
- 类的静态变量可以不赋初值,加载类时自动赋默认初值。
public class Test {
int a; // 成员变量
static int b; // 静态变量
public static void main(String[] args) {
int c; // 局部变量
System.out.println(c); // 局部变量不赋初值,调用时无法通过编译
// 先变量,再赋值
int d;
d = 100;
System.out.println(d);
// 一步到位,声明+赋值
int e = 800;
System.out.println(e);
System.out.println("类的成员变量未初始化:a = "+new Test().a);
System.out.println("静态变量未初始化:b = "+b);
}
}
1.2 变量的原理
- 如
int num = 100;
,创建变量num时,系统开辟一个对应数据类型大小(int为4字节)的内存空间,将值100的二进制码写入,num直接指向该空间。 - 注意:基本数据类型赋值时是值传递。
2 数据类型
Java有8种基本数据类型,3种引用数据类型。
2.1 基本数据类型
2.1.1 取值范围公式
- 各数据类型的表示范围不同,与其占用的内存空间有关
- 取值范围计算公式: ( − 2 n − 1 ) ∼ ( 2 n − 1 − 1 ) (-2^{n-1})\sim(2^{n-1}-1) (−2n−1)∼(2n−1−1)
- 其中n表示该数据类型所占的bit数
如:int类型占4字节=8bit,int的表示范围 ( − 2 8 − 1 ) ∼ ( 2 8 − 1 − 1 ) (-2^{8-1})\sim(2^{8-1}-1) (−28−1)∼(28−1−1)=-128~127
同理其它类型也可以由此公式计算得到
类型 | 占用存储空间 | 范围 |
---|---|---|
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 −231∼231−1 |
long | 8字节 | − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 −263∼263−1 |
float | 4字节 | − 3.40 3 38 ∼ 3.40 3 38 -3.403^{38}\sim3.403^{38} −3.40338∼3.40338 |
double | 8字节 | − 1.79 8 308 ∼ 1.79 8 308 -1.798^{308}\sim1.798^{308} −1.798308∼1.798308 |
2.1.2 整型
类型 | 占用存储空间 | 范围 |
---|---|---|
byte | 1字节 | -128~127 |
short | 2字节 | -32768~32767 |
int | 4字节 | − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 −231∼231−1 |
long | 8字节 | − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 −263∼263−1 |
- 不同类型的相同数值,所占的内存空间大小是不同的
- 整型常量默认为int,声明long型常量须后加‘l’或‘L’
int a = 1; // 这个1占用4个字节
long n3 = 1L; //这是正确的
- 声明整型变量时遵守保小不保大,数据类型能小则小
- bit是计算机中的最小存储单位,byte是计算机中的基本存储单元。1 byte=8 bit
2.1.3 浮点型
类型 | 占用存储空间 | 范围 |
---|---|---|
float | 4字节 | − 3.40 3 38 ∼ 3.40 3 38 -3.403^{38}\sim3.403^{38} −3.40338∼3.40338 |
double | 8字节 | − 1.79 8 308 ∼ 1.79 8 308 -1.798^{308}\sim1.798^{308} −1.798308∼1.798308 |
- 机器中的存放形式:浮点数+指数位+尾数位。尾数位可能丢失,造成精度损失(小数都是近似值,只有精度高低的区别)
- 浮点型常量默认为double,声明float型常量须后加‘f’或‘F’
// 必须以下方法写
float num2 = 1.1F; //对
double num3 = 1.1; //对
double num4 = 1.1f;//对
- 浮点型常量的2种表示形式:
- 十进制数形式:5.12, 512.0f, .512
- 科学计数法形式:5.12e2[5.12*10的2], 5.12E-2[5.12*10的-2次方]
// 浮点型两种表示形式
//十进制数形式:如,5.12 512.0f .512(必须有小数点)
float n = .123f;
System.out.println(n);
//科学计数法形式:如,5.12e2[5.12乘10的2次方]
//5.12E-2[5.12乘10的-2次方]
System.out.println(5.12e2);
System.out.println(5.12E-2);
浮点数使用陷阱:
2.1.4 字符型
类型 | 占用存储空间 | 范围 |
---|---|---|
char | 2字节 | unicode编码 |
- 表示单个字符,一般使用单引号’ '包括
- char的本质是整数,直接赋值整数时输出unicode码对应的字符
- 本质是整数,因此char是可以进行运算的,对于一个整数运算结果,在unicode码表中对应着一个字符
2.1.5 布尔型
类型 | 占用存储空间 | 范围 |
---|---|---|
boolean | 1字节 | true,false |
1.boolean类型数据只允许取TRUE和FALSE,无NULL
2. Java中,不能使用0代表false,非0代表true
2.2 引用数据类型
2.2.1 数组[]
数组链接: 后续更新链接
2.2.2 类class
类链接: 后续更新链接
2.2.3 接口interface
接口链接: 后续更新链接
3 数据类型转换
3.1 自动类型转换
java中进行赋值或运算时,精度小的类型可以自动转换为精度大的数据类型
- 多种类型的数据混合运算时,系统首先自动将所有数据转换为容量最大的那种数据类型,再进行计算
- 精度大的数据不能赋值给精度小的数据类型,反之可以(数据类型自动转换)
- (byte、short)和char不能相互自动转换,但可以计算,需要先转换为int类型
- 自动提升原则:表达式结果的类型自动提升为操作数中范围最大的类型
3.2 强制类型转换
- 将容量大的数据类型强制转换为容量小的数据类型,可能会造成精度降低或溢出
- 语法格式:
int i = (int)1.9
,其中( )
为强制转换符
//演示强制类型转换
int n1 = (int)1.9;
System.out.println("n1=" + n1);//精度损失
int n2 = 2000;
byte b1 = (byte)n2;//将int类型强制转换为byte会溢出
System.out.println("b1=" + b1);//数据溢出
3.3 String与基本数据类型相互转换
- 基本类型 转 String类型:基本数据类型+" "
//基本数据类型转String类型
int n1 = 100;
float f1 = 1.1f;
double d1 = 4.5;
boolean b1 = true;
String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
- String类型 转 基本类型:调用基本类型对应包装类的parseXX()方法,但String的值要满足转为int
//String转基本数据类型
//需要通过基本数据的包装类调用parseXX方法
String s5 = "123";
//OOP时细说,现在暂时了解 parse解析
//使用基本数据类型对应的包装类,的相应方法,得到基本数据类型
int s5Int = Integer.parseInt(s5);// String转int
double s5Double = Double.parseDouble(s5);//String转double
float s5Float = Float.parseFloat(s5);
short s5Short = Short.parseShort(s5);
byte s5Byte = Byte.parseByte(s5);
long s5Long = Long.parseLong(s5);
boolean s5Boolean = Boolean.parseBoolean("true");
System.out.println(s5Int);
System.out.println(s5Double);
//怎么把字符串转成字符char -> 指把字符串的第一个字符得到
//解读 s5.charAt(0) 得到s5字符串的第一个字符'1'
System.out.println(s5.charAt(0));