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的值为6
double 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 | 赋值运算 | =、+=、-=、*=、/=、%= |