文章目录
4. 常量(constant)
常量:是指在Java程序中固定不变的数据。
分类
类型 | 含义 | 数据举例 |
---|---|---|
整数常量 | 整数 | 正负整数 |
小数常量 | 小数 | 正负小数 |
字符常量 | 单引号引起来,只有一个字符,不允许为空 | ‘字’、‘a’、‘1’ |
字符串常量 | 双引号引起来,可以有多个字符,可以为空 | “字符串”、“123"、“abc”、"" |
空常量 | 只有一个值 | true、false |
布尔常量 | 只有两个值 | null(不可直接打印输出) |
5. 变量和数据类型(variable)
5.1 数据类型
5.1.1 分类
基本数据类型:整型、浮点型,字符、布尔型
引用数据类型:字符串、数组、接口、枚举、标注
1)基本数据类型:
整型、浮点型,字符、布尔型
Java中默认的类型:整型类型是
int
,浮点型是double
2)字符型
单个字节可以表示的整数范围是:-128~127
float默认是7位有效数字
double默认是15位有效数字
AscII编码表:将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表 ASCII(
American Standard Code for Information Interchange 美国标准信息交换码)。
字符 | 数值 |
---|---|
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
(Unicode是世界通用的定长字符集,所有的字符都是16位)
3)转义字符
\"--------"
\'--------'
\\--------\
\t--------制表符(tab)
\n--------换行
5.1.2 数据类型的转换
1)自动转换类型(隐式)
特点:代码不需要进行特殊处理,自动完成。
规则:数据范围从小到大(byte<short<char<int<long<float<double
)
//左边是long类型,左边默认是int整型,左右不一样
//表示把int常量100赋值给long变量进行存储
//发生了自动类型转换
long num=100;
//同理,符合从小到大的规则,进行了自动类型转换
double num1=1.55F;
/*
byte<short<char<int<long<float<double
*/
float num2=1.52L;
2)强制转换类型(显式)
特点:代码需要进行特殊的格式处理,不能自动完成。
格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
格式
格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
//会产生编译失败的情况
//左边是int整型变量,右边浮点型默认是double类型
//右边double类型取值范围比int整型大,所以无法进行自动类型转换
int i=1.5;
//强制类型转换
int i=(int) 1.5;
//左边是int类型,右边是long类型
//把long类型赋值到int byte<short<char<int<long<float<double
//由大到小,不能发生自动数据类型转换
int num=(int) 100L;
int num=(int)3.99; //所有小数位都会被舍弃,输出3
注意事项
- 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
- byte/short/char这三种类型都可以发生数学运算,例如加法“+”.
- byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
- boolean类型不能发生数据类型转换
byte<short<char<int<long<float<double
- 浮点类型数据计算可能出现误差,若想要想要实现精确运算则借助
java.math.BigDecimal
类型
System.out.printf(0.1+0.2); //0.3000 0000 0000 0000 4
5.2 变量
5.2.1 概念
变量:程序运行期间,内容可以发生改变的量。
5.2.2 格式:
数据类型 变量名称=数据值
//先声明一个变量,再赋值
int num1;
num1=5;
//或者一步到位
int num2=10;
5.2.3 注意事项:
-
如果创建多个变量,那么变量之间的名称不可以重复。
-
对于float和long类型来说,字母后缀F和L不要丢掉。
//定义单精度变量
float f=1.5F;
//定义长整型变量
long l=1.123456789L;
-
如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。
-
有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。
-
变量使用不能超过作用域的范围。
【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。
-
可以通过一个语句来创建多个变量,但是一般情况不推荐这么写。
6. 运算符
6.1 算数运算符
运算符 | 含义 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算(只取商,不取余数) |
% | 取模运算(只取余数,不取商) |
++ -- | 自增自减运算 |
注意事项:
-
如果两个整数相除时,结果只保留整数部分,小数部分会被舍弃
System.out.println(5/2); //结果是2,小数部分会被舍弃
-
如果希望保留运算结果的小数部分,使用强制转换类型把其中一个操作数转换为double类型在进行运算即可
System.out.println((double)5/2); //2.5 System.out.println(5/(double)2); //2.5 System.out.println((double)5/(double)2); //2.5
-
0和0.0都不能作除数
-
byte+byte=int
:(注意)byte b1=10; //b1=b1+2; byte+int=int;不兼容的类型,从int类型转换成byte可能会有精度损失 //b1=b1+(byte)2; byte+byte=int;由于编译器的优化,运算结果自动转换为int类型 b1=(byte)(b1+2) //强制类型转换 b1+=2; //真正等价于b1=(byte)(b1+2) //+=自带强转
1) 自增自减运算(只能用于变量,不能用于常数)
独立运算:++i与i++没有区别(自减同理)
混合运算:
变量i++
:先把a自己的值赋值给b,变量a再自己加1。最后的结果就是a=2,b=1**(先用后加)**
public static void main (String[] args) {
int a=1;
int b=a++;
System.out.println(a);//2
System.out.println(b);//1
}
变量++i
:变量a先自己加1,再把a赋值给b。最后的结果就是a=2,b=2**(先加后用)**
public static void main (String[] args) {
int a=1;
int b=++a;
System.out.println(a);//2
System.out.println(b);//2
}
2)四则运算当中的加号“+”有常见的三种用法:
-
对于数值来说,那就是加法。
-
对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算。
char类型字符和int类型数字之间的对照关系表:ASCII、Unicode
-
对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。
任何数据类型和字符串进行连接的时候,结果都会变成字符串
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 20); //Java20
6.2 赋值运算符
运算符 | 含义 |
---|---|
= | 等于 |
+= | 加等(自带强转) |
-= | 减等 |
*= | 乘等 |
/= | 除等 |
%= | 取模等 |
a+=1-------->a=a+1
b-=2-------->b=b-2
c*=3-------->c=c*3
d/=4-------->d=d/4
e%=5-------->e=e%5
6.3 比较运算符
运算符 | 含义 |
---|---|
== | 等于【两个等号连写才是相等,一个等号代表的是赋值】 |
>= | 大于等于 |
<= | 小于等于 |
> | 大于 |
< | 小于 |
!= | 不等于 |
注意事项:
- 比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false
- 如果进行多次判断,不能连着写。
(数学当中的写法,例如:1 < x < 3 程序当中【不允许】这种写法。)
6.4 逻辑运算符
运算符 | 含义 | 备注 |
---|---|---|
&& | 与(并且) | 全部是true,才是true,否则就是false |
|| | 或(或者) | 至少有一个true,就是true;全都是false,才是false |
! | 非(取反) | 本来是true,变成false;本来是false,变成true |
注意事项:
-
逻辑运算符只能用于boolean值。
-
与、或需要左右各自有一个boolean值,但是取反只要有唯一的一个boolean值即可。
-
与、或两种运算符,如果有多个条件,可以连续写。
两个条件:条件A && 条件B
多个条件:条件A && 条件B && 条件C
6.5 三元运算符
-
格式:
数据类型 变量名称 = 表达式 ? 结果1 : 结果2;
-
计算方式
-
流程:
首先判断表达式是true还是false
如果是true,那么将左侧的结果1,赋值给变量
如果是false,那么将右侧的结果2,赋值给变量
(二者选其一)
int num=1>2 ? 10:20; System.out.println(num);//20; int a=10; int b=20; int max=a<b ? a:b; System.out.println(max);//20 int result = 3 > 4 ? 2.5 : 10; // 错误写法!
注意事项:
- 必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
- 三元运算符的结果必须被使用。
6.6 移位运算符(了解)
-
<<
左移运算符,用于将数据的二进制位向左移动,右边使用0补充 -
>>
右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充 -
>>>
表示逻辑右移运算符(无符号右移),用于将数据的二进制位向右移动,左边使用0
补充。byte b1=13; //13的二进制是:0000 1101=>左移一位的结果是0001 1010(26) System.out.println(b1<<1); //左移一位相当乘于2 //右移:0000 1101 =>右移一位的结果是0000 0110(6) System.out.println(b1>>1) //右移一位相当于除以2 byte b2=(byte)(byte<<1);//要使用强转
6.7 位运算符(了解)
-
& 表示按位与运算符,按照二进制位进行与运算,同1为1,有0为0.
0000 1011 & 0000 1101 = 0000 1001
-
| 表示按位或运算符,按照二进制位进行或运算,有1为1,同0为0.
0000 1011 | 0000 1101 = 0000 1111
-
~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1.
0000 1011 ~ = 1111 0100
-
^ 表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.
0000 1011 ^ 0000 1101 = 0000 0110