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

一般情况下:整数用 int,浮点数用 double

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类型的
  • 例子:float f1 = 234.5F

    double

  • double是双精度浮点数、64 位

  • 浮点数的默认类型为double类型
  • 默认值是 0.0D
  • 添加了D后缀的整数常量都是double类型的
  • 例子:double d1 = 123.4

    1.4 字符

  • 最小值是0

  • 最大值是65535
  • 例子:char letter = 'A'
  • Java 的字符类型默认使用 Unicode 编码方案
  • Java 程序内部使用 UTF-16 编码
  • UTF-8 编码多用于存储和传输数据

思考:char数据类型可以储存任何字符吗?
Unicode查询:https://www.52unicode.com/

1.5 布尔

  • 只有两个取值:truefalse
  • 默认值是false
  • 例子:boolean one = true

    1.6 数据类型转换

    自动类型转换

    表示范围小的数据类型转换成范围大的数据类型,这种方式称为自动类型转换。
    自动类型转换格式:

    1. // 范围大的数据类型 变量 = 范围小的数据类型值;
    2. double d = 1000;
    3. int i = 100;
    4. double d2 = i;

    强制类型转换

    表示范围大的数据类型转换成范围小的数据类型,这种方式称为强制类型转换。
    强制类型转换格式:

    1. 范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值;
    2. int i = (int) 6.718; //i的值为6
    3. double d = 3.14;
    4. int i2 = (int)d; //i2的值为3

    注意:

  • 强制类型转换可能会造成数据精度的损失

  • 浮点转成整数,直接取消小数点,可能造成数据损失精度
  • int强制转成short砍掉2个字节,可能造成数据丢失

    转换原则

    转换的过程中,数据遵循一个原则:

  • 范围小的数据类型值(如byte),可以直接转换为范围大的数据类型值(如int

  • 范围大的数据类型值(如int),不可以直接转换为范围小的数据类型值(如byte

范围小的类型向范围大的类型提升:
数据类型转换.png
注意:

  • boolean类型不能和其它基本数据类型相互转换
  • char类型不能和shortbyte自动转换
  • byteshortchar运算时直接提升为int

    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 |

注意:
+=-=*=/= 赋值运算符包含了一个强制转换的操作,会将左右两边运算后的结果,强制类型转换后赋值给左边。

  1. int n = 10;
  2. byte by = 20;
  3. 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

注意:
比较运算符返回的计算结果都是boolean类型。

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