- 变量 p23
- 变量的理解:
内存中的一个存储区域,该区域中的数据可以在同一类型范围内不断变化
- 变量的构成:
三要素: 数据类型 ;变量名 ;存储的值
- Java中变量声明的格式:
数据类型 变量名 = 变量值
-
变量的数据类型
- 基本数据类型:8种
- 整型 byte | short | int | long
- 浮点型 float | double
- 字符型 char
- 布尔型 boolean
- 引用数据类型
- 类 class
- 数组 array
- 接口 interface
- 枚举 enum
- 注解 annotation
- 记录 record
定义变量时:变量需要遵循标识符命名的规则和规范
变量的作用:用于在内存中保存数据
变量都有作用域 变量只在作用域内才发挥作用
4.1 变量 数据类型的应用 p24~p29
4.1.1 变量的介绍
class VariableTest1{
public static void main(String[] args){
//整型:byte占用存储空间1字节,short占用2字节,int占用4字节,long占用8字节
//开发中,没有特殊情况,整型通常都声明为int类型
byte b1 = 12;
byte b2 = 127;
int i1 = 123;
long l1 = 123L; //需要加L/l
//浮点类型:单精度float占用4字节,双精度double占用8字节
//开发中,没有特殊情况,浮点型通常都声明为double类型
float f1 = 12.3f;//需要加f/F,否则认为是double类型
double d1 = 12.3f;
System.out.println("f1="+ f1);
System.out.println(0.1+0.2);//为什么结果不等于0.3
//char型:占用2字节
//表示形式1:使用一对''表示,内部有且仅有一个字符(可以是一个字母或者一个汉字、符号)
char c1 = 'a';
char c2 = '中';
//表示形式2:使用Unicode表示字符型常量 '\uXXXX' XXXX代表一个十六进制整数
char c3 = '\u';
//表示形式3:使用转义字符
char c4 = '\n';
char c5 = '\t';
System.out.println("hello"+ c4 +"world") // +为连接符
//表示形式4:使用ASCII码
char c6 = 97;//表示a,A为65
//布尔类型:判断逻辑条件,只有两个值;true 和 false; 常使用在流程控制语句中
boolean bo1 = true;
boolean bo2 = false;
}
}
4.1.2 变量之间的运算规则
//测试基本数据类型变量之间的运算规则,不包含boolean类型
//运算规则包含:自动类型提升:小容量可以赋值大容量,反之不可 byte、short、char->int->long->float->double
// 特别地,byte、short、char之间运算,需要赋值给int类型
规定:整型常量,为int型;浮点型常量,为double型
// 强制类型转换:需要使用强转浮:(),将容量大的转换为容量小的,可能会发生精度损失
class VariableTest2{
public static void main(String[] args){
double d1 = 12; // 自动类型提升
int i1 = (int)d1;// 强制类型转换
long l1 = 123;
short s1 = (short)l1;
}
}
long 和 float 的相同点在于都需要加后缀,否则 long 型会被认为是 int ,float 会被认为是 double
问题1:为什么float占用4个字节的内存,long占用8个字节,但是float的范围比long更广呢?
解答:从值域的角度,long最大值是要大于float类型;从范围的角度,float可以表示浮点数,表示的数的范围更广,但是会有精度缺失
问题2:为什么float会存在精度缺失的问题呢?
解答:因为浮点数采用二进制表示,而许多十进制小数无法精确地转换为二进制表示。这种转换会导致某些小数的精度损失,特别是在进行多次浮点数计算时。例如十进制中的0.1,用二进制表示是一个无限循环的小数,在 Java 中,float
类型可以保留大约 7 位有效数字。
4.2 String类型的运算 p30~p31
- String是一个类,在变量中属于引用数据类型,而不是基本数据类型
- 通过 “ ” 来表示一个字符串,内部可以包含 0 个、1个或多个字符
- 声明方式:String str = “ lyh ”
运算规则:
-
String类型的数据
与 8 种基本数据类型
的数据只能进行连接 “+” 运算,结果为String类型的数据
-
String类型的数据
不能通过强制类型 () 转换,转为其他的类型 -
String类型的数据
与 8 种基本数据类型
的数据的相加顺序很重要,有时需要加括号才能使得编译通过
System.out.println("" + 3 + 5);//输出35
int num = 10;
boolean b1 = true;
String s1 = "abc";
String s2 = s1 + num + b1;//s1 + num 拼接得到字符串,再次与 b1 拼接得到最终结果
System.out.println(s2);//abc10true
//String s3 = num + b1 + s1;//编译不通过,因为int类型不能与boolean运算
String s4 = num + (b1 + s1);//编译通过