1. 基本数据类型
目标
- 熟悉8种基本数据类型
- 理解自动数据类型转换
- 掌握强制数据类型转换语法
- 掌握数据类型转换原则
1.1 概述
Java 是一种强类型的编程语言,在声明变量的时候,要明确数据类型。
Java中 基本数据类型 一共 4类,把这4类展开后共 8种 基本类型。
| 四类 | 八种 | 字节数 | 取值范围 | 默认值 |
|---|---|---|---|---|
| 整数 | byte |
1 | [-128, 127] | 0 |
short |
2 | [-32768, 32767] | 0 | |
int |
4 | [-2147483648, 2147483647] | 0 | |
long |
8 | [-2^63, 2^63 -1] | 0L | |
| 浮点数 | float |
4 | [1.4E-45, 3.4028235E38] | 0.0F |
double |
8 | [4.9E-324, 1.7976931348623157E308] | 0.0D | |
| 字符 | char |
2 | [0, 65535] | 0 |
| 布尔 | boolean |
1 | true,false | false |
1.2 整数
byte
byte数据类型是8位- 最小值是 -128
- 最大值是 127
- 默认值是 0
byte类型用在大型数组中节约空间,因为 byte 变量占用的空间只有int类型的四分之一例子:
byte a = 100, byte b = -50;short
short数据类型是 16 位- 最小值是 -32768
- 最大值是 32767
short数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一- 默认值是 0;
例子:
short s = 1000, short r = -20000;int
int数据类型是32位- 最小值是 -2147483648
- 最大值是 2147483647
- 整型变量默认为
int类型 - 默认值是 0
例子:
int a = 100000, int b = -200000;long
long 数据类型是 64 位
- 最小值是 -9223372036854775808
- 最大值是 9223372036854775807
- 这种类型主要使用在需要比较大的整数的系统上
- 默认值是
0L - 添加了
L后缀的整数常量都是long类型的 - 例子:
long a = 100000L,Long b = -200000L
L不区分大小写,但是若写成小写l容易与数字1混淆,不容易分辩,所以建议大写。
1.3 浮点数
float
float是单精度浮点数,32位float在储存大型浮点数组的时候可节省内存空间- 默认值是 0.0F
- 添加了
F后缀的整数常量都是float类型的 -
double
double是双精度浮点数、64 位- 浮点数的默认类型为
double类型 - 默认值是 0.0D
- 添加了
D后缀的整数常量都是double类型的 -
1.4 字符
最小值是0
- 最大值是65535
- 例子:
char letter = 'A' - Java 的字符类型默认使用 Unicode 编码方案
- Java 程序内部使用 UTF-16 编码
- UTF-8 编码多用于存储和传输数据
思考:char数据类型可以储存任何字符吗?
Unicode查询:https://www.52unicode.com/
1.5 布尔
- 只有两个取值:
true和false - 默认值是
false -
1.6 数据类型转换
自动类型转换
表示范围小的数据类型转换成范围大的数据类型,这种方式称为自动类型转换。
自动类型转换格式:// 范围大的数据类型 变量 = 范围小的数据类型值;double d = 1000;int i = 100;double d2 = i;
强制类型转换
表示范围大的数据类型转换成范围小的数据类型,这种方式称为强制类型转换。
强制类型转换格式:范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值;int i = (int) 6.718; //i的值为6double d = 3.14;int i2 = (int)d; //i2的值为3
注意:
强制类型转换可能会造成数据精度的损失
- 浮点转成整数,直接取消小数点,可能造成数据损失精度
-
转换原则
转换的过程中,数据遵循一个原则:
范围小的数据类型值(如
byte),可以直接转换为范围大的数据类型值(如int)- 范围大的数据类型值(如
int),不可以直接转换为范围小的数据类型值(如byte)
范围小的类型向范围大的类型提升:
注意:
boolean类型不能和其它基本数据类型相互转换char类型不能和short或byte自动转换-
2. 运算符
目标
[x] 掌握以下运算符的使用
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
- 掌握运算符的优先级
3.1 算术运算符
| 运算符 | 运算规则 | 范例 | 结果 | | —- | —- | —- | —- | | + | 正号 | +3 | 3 | | + | 加 | 2+3 | 5 | | + | 连接字符串 | “中”+”国” | “中国” | | - | 负号 | int a=3; -a | -3 | | - | 减 | 3-1 | 2 | | | 乘 | 2 3 | 6 | | / | 除 | 5 / 2 | 2 | | % | 取模(取余) | 5 % 2 | 1 | | ++ | 自增 | int a=1; a++/++a | 0 | | — | 自减 | int b=3; a—/—a | 2 |
注意:
- 加法运算符在连接字符串时,只有直接与字符串相加才会转成字符串;
- 除法
/当两边为整数时,结果取整数部分,舍余数。当其中一边为浮点型时,按正常规则相除; %为整除取余符号,小数取余没有意义。结果符号与被取余符号相;0不能做除数,否则报错;i++,i--先使用变量i原有值参与运算操作,运算操作完成后,变量i的值自增1或者自减1;++i,--i先将变量i的值自增1或者自减1,然后使用更新后的新值参与运算操作。3.2 赋值运算符
| 运算符 | 运算规则 | 范例 | 结果 | | —- | —- | —- | —- | | = | 赋值 | int a=2 | 2 | | += | 加后赋值 | int a=2,a+=2 | 4 | | -= | 减后赋值 | int a=2,a-=2 | 0 | | = | 乘后赋值 | int a=2,a=2 | 4 | | /= | 整除后赋值 | int a=2,a/=2 | 1 | | %= | 取模后赋值 | int a=2,a%=2 | 0 |
注意:+=,-=,*=,/= 赋值运算符包含了一个强制转换的操作,会将左右两边运算后的结果,强制类型转换后赋值给左边。
int n = 10;byte by = 20;by += n; // 运算完毕后,by的值为byte类型30, 相当于代码 by = (byte)(by + n);
3.3 比较运算符
| 运算符 | 运算规则 | 范例 | 结果 |
|---|---|---|---|
| == | 相等于 | 4==3 | false |
| != | 不等于 | 4!=3 | true |
| < | 小于 | 4<3 | false |
| > | 大于 | 4>3 | true |
| <= | 小于等于 | 4<=3 | false |
| >= | 大于等于 | 4>=3 | true |
3.4 逻辑运算符
| 运算符 | 运算规则 | 范例 | 结果 |
|---|---|---|---|
| ! | 逻辑非 | !true | flase |
| && | 逻辑与(遇假则假) | false&&true | false |
| || | 逻辑或(见真则真) | false||true | true |
注意:
当使用&&或者||时,只要能判断出结果则后边的部分就不再判断和运算。
3.5 三元运算符
语法结构:
条件表达式 ? 表达式1: 表达式2;
计算规则:
先判断条件表达式的值,若为true,运算结果为表达式1;若为false,运算结果为表达式2
3.6 运算符优先级
| 优先级 | 描述 | 运算符 |
|---|---|---|
| 1 | 括号 | () |
| 2 | 正负号 | +、- |
| 3 | 自增自减,非 | ++、—、! |
| 4 | 乘除,取余 | *、/、% |
| 5 | 加减 | +、- |
| 7 | 大小关系 | >、>=、<、<= |
| 8 | 相等关系 | ==、!= |
| 9 | 逻辑与 | && |
| 10 | 逻辑或 | || |
| 11 | 三元运算 | ? : |
| 12 | 赋值运算 | =、+=、-=、*=、/=、%= |
