1.定义出各种数据类型的变量
2.理解自动类型提升
3.理解强制类型转换
1.能够定义出所有类型的常量
2.理解Java中的基本数据类型分类
3.能够定义8种基本数据类型的变量
4.理解数据类型的强制转换
5.理解数据类型的自动转换
6.了解ASCII编码表
7.理解int类型和char类型的运算原理
“常量”的广义概念是:‘不变化的量’(例如:在计算机程序运行时,不会被程序修改的量;数学函数中的某一个量,例如每一个具体的圆的半径、直径数值;物理学中的靠近地面的重力加速度;真空中的光速数值;不同的微粒的各自的质量)换言之,常量,在计算机技术方面虽然是为了硬件、软件、编程语言服务,但是它并不是专门为硬件、软件、编程语言而引入的概念。
常量:是指在Java程序中固定不变的数据。
类型 | 含义 | 数据举例 |
---|---|---|
整数常量 | 所有的整数 | 0,1, 567, -9 |
小数常量 | 所有的小数 | 0.0, -0.1, 2.55 |
字符常量 | 单引号引起来,只能写一个字符,必须有内容 | 'a' , ' ', '好' |
字符串常量 | 双引号引起来,可以写多个字符,也可以不写 | "A" ,"Hello" ,"你好" ,"" |
布尔常量 | 只有两个值(流程控制中讲解) | true,false |
空常量 | 只有一个值(引用数据类型中讲解) | null |
需求:输出各种类型的常量
1 public class ConstantDemo { 2 public static void main(String[] args){ 3 //输出整数常量 4 System.out.println(123); 5 //输出小数常量 6 System.out.println(0.125); 7 //输出字符常量 8 System.out.println('A'); 9 //输出布尔常量 10 System.out.println(true); 11 //输出字符串常量 12 System.out.println("你好Java"); 13 } 14 }
java语言是强类型的语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
Java的数据类型分为两大类:
基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔 。
引用数据类型:包括 类 、 数组 、 接口 。
四类八种基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~127 |
短整型 | short | 2个字节 | -32768~32767 |
整型 | int(默认) | 4个字节 | -2的31次方~231次方-1 |
长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
单精度浮点数 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0-65535 |
布尔类型 | boolean | 1个字节 | true,false |
Java中的默认类型:整数类型是 int 、浮点类型是 double 。
变量:常量是固定不变的数据,那么在程序中可以变化的量称为变量。
数学中,可以使用字母代替数字运算,例如 x=1+5 或者 6=x+5。
程序中,可以使用字母保存数字的方式进行运算,提高计算能力,可以解决更多的问题。比如x保存5,x也可以保存6,这样x保存的数据是可以改变的,也就是我们所讲解的变量。
Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。
java变量的定义:在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值
变量定义的格式包括三个要素: 数据类型 、 变量名 、 数据值 。
格式:数据类型 变量名 = 数据值
1 public class VariableDemo { 2 public static void main(String[] args){ 3 //定义整型变量 4 int a = 1; 5 //定义单精度浮点型变量 6 float f = 12.56F; 7 //定义boolean变量 8 boolean b = false; 9 //定义字符变量 10 char ch = 'c'; 11 12 } 13 }
定义所有基本数据类型的变量,代码如下:
1 public class Variable { 2 public static void main(String[] args){ 3 //定义字节型变量 4 byte b = 100; 5 System.out.println(b); 6 //定义短整型变量 7 short s = 1000; 8 System.out.println(s); 9 //定义整型变量 10 int i = 123456; 11 System.out.println(i); 12 //定义长整型变量 13 long l = 12345678900L; 14 System.out.println(l); 15 //定义单精度浮点型变量 16 float f = 5.5F; 17 System.out.println(f); 18 //定义双精度浮点型变量 19 double d = 8.5; 20 System.out.println(d); 21 //定义布尔型变量 22 boolean bool = false; 23 System.out.println(bool); 24 //定义字符型变量 25 char c = 'A'; 26 System.out.println(c); 27 } 28 }
long类型:建议数据后加L表示。
float类型:建议数据后加F表示。
变量名称:在同一个大括号范围内,变量的名字不可以相同。
变量赋值:定义的变量,不赋值不能使用。
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
一个 int 类型变量和一个 byte 类型变量进行加法运算, 结果会是什么数据类型?
1 int i = 1; 2 byte b = 2; 3 int j = b + i;
运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。
自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型
1 public static void main(String[] args) { 2 int i = 1; 3 byte b = 2; 4 // byte x = b + i; // 报错 5 //int类型和byte类型运算,结果是int类型 6 int j = b + i; 7 System.out.println(j); 8 }
转换的原理图解:
byte 类型内存占有1个字节,在和 int 类型运算时会提升为 int 类型 ,自动补充3个字节,因此计算后的结果还是 int 类 型。
同样道理,当一个 int 类型变量和一个 double 变量运算时, int 类型将会自动提升为 double 类型进行运算。
1 public static void main(String[] args) { 2 int i = 1; 3 double d = 2.5; 4 //int类型和double类型运算,结果是double类型 5 //int类型会提升为double类型 6 double e = d+i; 7 System.out.println(e); 8 }
范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int
1 byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
将 1.5 赋值到 int 类型变量会发生什么?产生编译失败,肯定无法赋值。
1 int i = 1.5;//错误
double 类型内存8个字节, int 类型内存4个字节。 1.5 是 double 类型,取值范围大于 int 。可以理解为 double 是8 升的水壶, int 是4升的水壶,不能把大水壶中的水直接放进小水壶去。
想要赋值成功,只有通过强制类型转换,将 double 类型强制转换成 int 类型才能赋值。
强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。
比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
转换格式:
数据类型 变量名 = (数据类型)被转数据值;
将 1.5 赋值到 int 类型,代码修改为:
1 // double类型数据强制转成int类型,直接去掉小数点。 2 int i = (int)1.5;
同样道理,当一个 short 类型与 1 相加,我们知道会类型提升,但是还想给结果赋值给short类型变量,就需要强制转换。
1 public static void main(String[] args) { 2 //short类型变量,内存中2个字节 3 short s = 1; 4 /*出现编译失败 s和1做运算的时候,1是int类型,s会被提升为int类型 s+1后的结果是int类型,将结果在赋值 会short类型时发生错误 short内存2个字节,int类型4个字节 必须将int强制转成short才能完成赋值 */ 5 s = s + 1;//编译失败 6 s = (short)(s+1);//编译成功 7 }
转换原理图解:
浮点转成整数,直接取消小数点,可能造成数据损失精度。
int 强制转成 short 砍掉2个字节,可能造成数据丢失。
1 // 定义s为short范围内最大值 2 short s = 32767; 3 // 运算后,强制转换,砍掉2个字节后会出现不确定的结果 4 s = (short)(s + 10);
1 public static void main(String[] args) { 2 //字符类型变量 3 char c = 'a'; 4 int i = 1; //字符类型和int类型计算 5 System.out.println(c+i);//输出结果是98 6 }
在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别文字的问题呢?就产生出了编码表的概念。
编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。
人们就规定:
字符 | 数值 |
---|---|
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII
(American Standard Code for Information Interchange 美国标准信息交换码)。
在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。
1.常量和变量的定义
2.java中数据类型的分类
3.自动类型提升
4.强制类型转换