学习目标
* 掌握Java数据类型与变量的定义
* 掌握Java数据类型的转换
* 掌握常用运算符的使用
第1章 变量与数据类型
1.1 变量概述
- 变量:常量是固定不变的数据,那么在程序中可以变化的量称为变量。
数学中,可以使用字母代替数字运算,例如 y=x+5 或者 6=x+5。
程序中,可以使用字母保存数字的方式进行运算,提高计算能力,可以解决更多的问题。比如x保存5,x也可以保存6,这样x保存的数据是可以改变的,也就是我们所讲解的变量。
Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。
1.2 数据类型
Java是一种强类型语言,为不管是常量还是变量都必提供了具体的数据类型,来表示我们声明的常量或者变量是什么类型,怎么赋值。
1.2.1 Java数据类型分类
Java的数据类型分为两大类:
- 基本数据类型:包括
整数
、浮点数
、字符
、布尔
。 - 引用数据类型:包括
类
、数组
、接口
,枚举
,注解
。
**说明:**后期学习过程中,除了8种基本数据类型外,都属于引用数据类型。
1.2.2 基本数据类型
四类八种基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128 至 127 |
短整型 | short | 2个字节 | -32768 至 32767 |
整型 | int(默认) | 4个字节 | -231 至 231-1 |
长整型 | long | 8个字节 | -263 至 263-1 19位数字 |
单精度浮点数 | float | 4个字节 | 1.4013E-45 至 3.4028E+38 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324 至 1.7977E+308 |
字符型 | char | 2个字节 | 0 至 216-1 |
布尔类型 | boolean | 1个字节 | true,false |
Java中的默认类型:整数类型是
int
、浮点类型是double
。e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。
1.3 变量的定义
变量定义的格式包括三个要素:数据类型
、 变量名
、 数据值
。
格式:
// 声明变量并赋值
数据类型 变量名 = 数据值;
或者
// 先声明,后赋值(使用前赋值即可)
数据类型 变量名;
变量名 = 初始化值;
当然,如果一次要声明多个变量,且这多个变量类型一样时,也可以这样定义:
// 同时声明多个同类型的变量,中间用逗号分隔
数据类型 变量名1,变量名2;
数据类型 变量名1=值1,变量名2=值2;
练习:
定义所有基本数据类型的变量,代码如下:
public class Variable {
public static void main(String[] args){
//定义字节型变量
byte b = 10;
System.out.println(b);
//定义短整型变量
short s = 100;
System.out.println(s);
//定义整型变量
int i = 123456;
System.out.println(i);
//定义长整型变量
long l = 12345678900L;
System.out.println(l);
//定义单精度浮点型变量
float f = 5.0F;
System.out.println(f);
//定义双精度浮点型变量
double d = 8.0;
System.out.println(d);
//定义布尔型变量
boolean flag = true;
System.out.println(flag);
//定义字符型变量
char c = 'a';
System.out.println(c);
}
}
long类型:建议数据后加L表示。
float类型:数据后必须加F或者f表示。
注意:
- 变量名称:在同一个大括号范围内,变量名不可以重复。
- 变量赋值:定义的变量,不赋值不能使用。
第2章 数据类型转换
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。而这里的数据类型转换分为自动转换和强制转换两种。
2.1 自动转换
一个int
类型变量和一个byte
类型变量进行加法运算, 结果会是什么数据类型?
int i = 1;
byte b = 2;
运算结果,变量的类型将是int
类型,这就是出现了数据类型的自动类型转换现象。
- 自动转换:将
取值范围小的类型
自动提升为取值范围大的类型
。
public static void main(String[] args) {
int i = 1;
byte b = 2;
// byte x = b + i; // 报错
// int类型和byte类型运算,结果是int类型
int j = b + i;
System.out.println(j);
}
这里,我们可以以一个小瓶水和一个大瓶水相加为例进行说明。
转换原理图解:
byte
类型内存占有1个字节,在和int
类型运算时会提升为int
类型 ,自动补充3个字节,因此计算后的结果还是int
类型。
同样道理,当一个int
类型变量和一个double
变量运算时,int
类型将会自动提升为double
类型进行运算。
public static void main(String[] args) {
int i = 1;
double d = 2.5;
//int类型和double类型运算,结果是double类型
//int类型会提升为double类型
double e = d+i;
System.out.println(e);
}
自动转换规则:
范围小的类型向范围大的类型提升,byte、short、char
运算时直接提升为int
。
byte、short、char-->int-->long-->float-->double-->String
2.2 强制转换
将1.5
赋值到int
类型变量会发生什么?产生编译失败,肯定无法赋值。
int i = 1.5; // 编译报错
double
类型内存8个字节,int
类型内存4个字节。1.5
是double
类型,取值范围大于int
。可以理解为double
是8升的水壶,int
是4升的水壶,不能把大水壶中的水直接放进小水壶去。
想要赋值成功,只有通过强制类型转换,将double
类型强制转换成int
类型才能赋值。
- 强制类型转换:将
取值范围大的类型
强制转换成取值范围小的类型
。
比较而言,自动转换是Java自动执行的,因为自动提升后不会丢失精度,出现错误;而强制转换需要我们自己判断是否手动执行,因为可能会出现精度丢失的问题。
转换格式:
数据类型 变量名 = (要转换成的数据类型)被转数据值;
将1.5
赋值到int
类型,代码修改为:
// double类型数据强制转成int类型,直接去掉小数点。
int i = (int)1.5;
同样道理,当一个short
类型与1
相加,我们知道会类型提升,但是还想给结果赋值给short类型变量,就需要强制转换。
public static void main(