变量
1.分类:
基本数据类型
整型:short byte int long
浮点型:float double
字符型:char
布尔型:boolean
引用数据类型
类 数组 接口 枚举 注解
2.注意事项:
a.变量不初始化(第一次赋值)不能直接使用
b.在同一个作用域中不能连续定义相同名字的变量
标识符
1.概述:给类,方法,变量取的名字
2.注意:
硬性要求(必须遵守):
a.标识符可以包含’英文字母’,‘数字’,“$和_”
b.标识符不能以数字开头 int i1 = 100(正确) int 1i = 100(错误)
c.标识符不能是关键字 int publicstatic = 10
软性建议(建议遵守):
a.给类取名字:遵循大驼峰式 -> 每个单词首字母大写
b.给方法和变量取名字:遵循小驼峰式 -> 从第二个单词开始往后首字母大写
类型转换
1.在等号两边数据类型不一致时发生数据类型转换
2.分类:
a.自动类型转换
大 = 小(取值范围小的赋值给取值范围大的数据类型)
b.强制类型转换
小 = 大
3.自动类型转换
a.取值范围大的数据类型 变量名 = 取值范围小的数据类型 -> 小的数据类型自动提升为大的数据类型
b.小类型遇到了大类型做运算 -> 小自动转大的类型
int num3 = 10;
double num4 = 2.5;
/*
double = int+double
double = double+double
小类型和大类型做运算,小类型会自动提升为大类型
*/
double sum = num3+num4;
System.out.println(sum);)
4.强制类型转换
取值范围小的数据类型 变量名 = 取值范围大的数据类型 -> 报错
怎么进行强转:
取值范围小的数据类型 变量名 = (取值范围小的数据类型)取值范围大的数据类型
5.强转注意事项
a.不要故意写成强转,除非没办法
b.如果随意强转会容易出现:精度损失 数据溢出
c.byte,short 如果等号右边是常量,如果不超出范围,不会报错,jvm自动转型
byte,short 如果等号右边有变量参与运算,会自动提升为int,结果重新赋值给byte short变量,需要手动强转
public class Demo04DataType{
public static void main(String[] args){
byte num1 = 100;//等号右边是一个值,不超出范围,不会报错,jvm自动强转
System.out.println(num1);
byte num2 = (byte)200;//如果超出范围,需要我们自己强转
System.out.println(num2);
byte num3 = 10+1;
System.out.println(num3);
byte num4 = 1;
/*
byte = byte+int
byte = int+int -> 需要手动转
*/
byte num5 = (byte)(num4+1);
System.out.println(num5);
System.out.println("=====================");
char num6 = '0';
System.out.println(num6+0);
System.out.println('中'+0);//20013
int num7 = '国';
System.out.println(num7);
}
}
d.char类型参与运算,会自动提升为int型,如果char类型提升为int型之后,会自动去ASCII码表查询字符对应的int值
如果ASCII码表中没有,会去unicode码表去查(万国码)
赋值运算符
+= -= *= /= %=
针对于复合赋值运算符:
byte short 参与运算,jvm会自动强转
byte b = 10;
//b = b+1;
b+=1;//b = b+1
System.out.println(b);
位运算符
1代表true 0代表false
我们要知道计算机在存储数据的时候都是存储的数据的补码,而计算的也是数据的补码
1.正数二进制最高位为0;负数二进制最高位是1
2.正数的原码,反码,补码一致
如:5的源码,反码,补码为:
0000 0000 0000 0000 0000 0000 0000 0101->二进制最高位是0,因为是正数
3.负数的话原码,反码,补码就不一样了
反码是原码的基础上最高位不变,其他的0和1互变
补码是在反码的基础上+1
如:-9
原码:1000 0000 0000 0000 0000 0000 0000 1001
反码:1111 1111 1111 1111 1111 1111 1111 0110
补码:1111 1111 1111 1111 1111 1111 1111 0111
(1)左移:<<
运算规则:左移几位就相当于乘以2的几次方
**注意:**当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位
2<<2 等于8
相当于:2*(2的2次方)
-2<<2 等于-8
相当于:-2*(2的2次方)
(2)右移:>>
快速运算:类似于除以2的n次,如果不能整除,向下取整
9>>2 等于 2
相当于:9除以(2的2次方)
-9>>2 等于-3
相当于:-9除以(2的2次方)
(3)无符号右移:>>>
运算规则:往右移动后,左边空出来的位直接补0,不管最高位是0还是1空出来的都拿0补
正数:和右移一样
9>>>2 等于 2
相当于:9除以(2的2次方)
负数:右边移出去几位,左边补几个0,结果变为正数
-9>>>2
结果为:1073741821
8>>>32位->相当于没有移动还是8
8>>>34位->相当于移动2位
(4)按位与:&
将0看成为false 将1看成true
运算规则:对应位都是1才为1,相当于符号左右两边都为true,结果才为true
1 & 1 结果为1 相当于 true&true
1 & 0 结果为0
0 & 1 结果为0
0 & 0 结果为0
比如: 5&3 结果为1
(5)按位或:|
运算规则:对应位只要有1即为1,相当于符号前后只要有一个为true,结果就是true
1 | 1 结果为1
1 | 0 结果为1
0 | 1 结果为1
0 | 0 结果为0
比如: 5|3 结果为:7
(6)按位异或:^
运算规则:对应位一样的为0,不一样的为1
1 ^ 1 结果为0 false
1 ^ 0 结果为1 true
0 ^ 1 结果为1 true
0 ^ 0 结果为0 false
比如: 5^3 结果为6
(7)按位取反
运算规则:~0就是1
~1就是0
~10 -> 结果为-11
进制的转换
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | a或A |
11 | 1011 | 13 | b或B |
12 | 1100 | 14 | c或C |
13 | 1101 | 15 | d或D |
14 | 1110 | 16 | e或E |
15 | 1111 | 17 | f或F |
16 | 10000 | 20 | 10 |
十进制转成二进制
辗转相除法-> 循环除以2,取余数
二进制转成十进制
8421规则
二进制转成八进制
将二进制分开(3位为一组)
二进制转成十六进制
将二进制分开(4位为一组)