2.1 常量
概念:不能变化的数据
分类:
整数常量:所有整数
小数常量:所有小数
字符串常量:所有字符串,
字符串:一串字符,若干个字符组成的有序序列,字符串必须使用一对双引号括起来
字符常量:任何一个字符
例如:'1'、'+'、'a'、'Z'、'是',由一对单引号括起来的单个字符,不能有空字符
2.2 数据类型
在Java中有严格的数据类型的划分(强类型的语言)
在Java任何一个值,都有所对应的类型
分类:
基本数据类型
引用数据类型
2.2.1 基本数据类型
整数类型
byte:字节型,1个字节,范围:
-2^7 ~ 2^7-1 也就是 -128 ~ 127
short:短整型,2个字节,范围:
-2^15 ~ 2^15-1 也就是-32768 ~ 32767
int:整型,默认整型,4个字节,范围:
-2^31 ~ 2^31-1
long:长整型,8个字节,范围:
-2^63 ~ 2^63-1
小数类型(浮点类型)
float:单精度浮点类型,4个字节,
负数范围:
-3.4E38 ~ -1.4E-45
正数范围:1.4E-45 ~ 3.4E38
double:双精度浮点类型,8个字节,默认小数
负数范围:
-1.7E308 ~ -4.9E-324
正数范围:4.9E-324 ~ 1.7E308
字符类型
char:2个字节,范围:
0 ~ 65535
,它遵循Unicode万国码,字符值必须使用一对单引号括起来,有且只能有一个字符布尔类型
boolean:1个字节,取值范围:
true/false
,描述成"满足条件"/"不满足条件"
2.2.2 引用数据类型
字符串:Java 程序中的所有字符串字面值(如
"abc"
)都是字符串值。字符串中允许没有字符,称为空字符串,简称空串,String 是只读字符串,对它进行任何操作,其实都是创建一个新的对象,再把引用指向该对象。定义格式:同基本数据类型的定义
String 变量名1 = 值; String 变量名2; 变量名2 = 值;数组、链表
对象
2.2.3 转义字符
Java中可以通过对特定字符进行转义,来表示其他含义
例如:
public static void main(String[] args){ System.out.println(''');// 这句话编译失败,我们需要对中间的单引号进行转义 }转义符号:
\
常见的转义:
\n
:换行符
\t
:制表符(缩进)
\'
:单引号
\"
:双引号
\\
:反斜杠
2.3 变量
2.3.1 变量的概念
计算机内存中的一块存储空间,是存储数据的基本单元
2.3.2 变量的定义
先定义,后赋值
格式:
数据类型 变量名; 变量名 = 值;
定义的同时赋值
格式:
数据类型 变量名 = 值;
同时为多个同类型的变量定义和赋值
格式:
数据类型 变量名1,变量名2 = 值,变量名3 = 值,变量名4,...;
注:
在同一个代码块中变量名不能重复
变量必须先赋值才能使用
赋值的类型必须与变量的类型一致
赋的值必须在指定类型范围中
将小数赋值给float类型的变量时,需要加上
f
或者F
一个超过int范围的整数必须加上
l
或者L
2.4 运算符
2.4.1 算术运算符
+:求和运算,如果参与运算的数据中有字符串,那么“+”就是拼接,拼接后的结果仍然是字符串 -:求差 *:求乘积 /:求商,整数之间的除法可能存在精度损失 %:取模,求余数 注: 1.a % b,如果a < b,结果就是a 2.a % b,如果a > b,结果是[0,b-1] 3.a % b结果是正负与a一致 ++(自增1)、--(自减1): 自增和自减的前置和后置:将++、--运算符写在变量前称为前置;反之,称为后置 1.在单独运算时,前置和后置没有区别 2.在复合运算时, (1)前置:先执行自增(减),再执行其他操作 (2)后置:先执行其他操作,再执行自增(减)
2.4.2 赋值运算符
=:赋值,将=右边表达式的结果运算完毕后,赋值给=左边的变量 +=:a += b 等价于 a = a + b -=:a -= b 等价于 a = a - b *=:a *= b 等价于 a = a * b /=:a /= b 等价于 a = a / b %=:a %= b 等价于 a = a % b
2.4.3 逻辑运算符
&:与,并且,表达式两边只要出现了false,整个表达式的结果就是false |:或,或者,表达式两边只要出现了true,整个表达式的结果就是true !:非,取反,true的取反结果是false,false的取反结果是true ^:异或,表达式两边相同结果是false,两边不同结果是true&&:表达式左边为false,表达式右边不再运算,整个表达式的结果是false ||:表达式左边为true,表达式右边不再运算,整个表达式的结果是true注:
逻辑运算符参与运算的数据和运算的结果一定是布尔值
多个布尔值的逻辑运算仍然遵循上述特点
2.4.4 关系运算符
> < >= <= ==:比较两个值是否相等 !=:比较两个值是否不相等注:
关系运算符的结果是布尔值
表达式两边的数据类型必须是相同的,或者可以互相转换的
2.4.5 三元运算符
格式:
表达式1 ? 表达式2 : 表达式3逻辑:运算表达式1,结果为true执行表达式2;反之,执行表达式3
注:
表达式1运算的结果必须是一个布尔值
表达式2、表达式3必须执行一个,并且只会执行一个
表达式2、表达式3可以是值,也可以是表达式,不能是语句
2.4.6 位运算
&:按位与 |:按位或 ^:按位异或将十进制数转换成二进制,按位进行
与、或、异或
的运算,再将最后的结果转换成十进制数转换成的二进制数中的
0视作false,1视作true
,进行逻辑运算,运算完毕后,再转换成0或1System.out.println(3 & 4); System.out.println(6 | 5); System.out.println(4 & 5 | 6 ^ 7);//5左移:将十进制数转换成二进制数,向左移动指定的位数,移动后用0补全,最后转换成十进制数
公式:
a << b 等价于 a乘以2的b次方
2.5 数据类型转换
问:两种不同类型的数据是否可以一起运算?
答:可以
2.5.1 自动类型转换
概念:范围小的数据与范围大的数据运算时,结果会自动转换成范围大的数据类型
自动类型转换的规则:
double > float > long > int > short > byte
注:
byte b = 120;// 编译通过,原因是120是常量,程序在执行过程中,不会发生变化 int i = 120; byte c = i;// 编译失败,原因是i是int类型的变量,程序在执行过程中,i可能发生变化从而超出byte的范围
数据类型所占的空间大小(字节)与所能表示的数据范围无关
2.5.2 强制类型转换
概念:范围大的数据赋值给范围小的数据类型的变量
格式:
范围小的数据类型 变量名 = (范围小的数据类型)范围大的数据类型的数据;注:
强制类型转换可能出现精度损失、数据错误等问题,所以慎用
float f = 20.886f; long l = (long)f; System.out.println(l);// 20 byte bb = (byte)128; System.out.println(bb);// -128byte和short之间运算的结果是int
如果表达式的运算结果超过了范围,需要对整个表达式的结果进行强制类型转换
byte b1 = 3; byte b2 = 4; // int b3 = b1 + b2; short b3 = (short) (b1 + b2);++、--、+=、-=、... 自带强制类型转换
2.5.3 char的类型转换
char类型的数据可以与十进制数遵循ASCII码表进行转换
‘0’~‘9’:48~57 'A'~'Z':65~90 'a'~'z':97~122