定义
Java中恒定不变的数据
常量的分类
字面值常量
- 整数常量:10,11
- 小数常量:3.14
- 字符串常量:被双引号括起来例如:"helloworld"
- 字符常量:被单引号括起来如:'a','B',当字符常量参与运算时会转换为ASCII表中对应的值计算。
- 布尔常量:true/false
- 空常量:null
自定义常量
进制介绍
二进制:逢二进一,由0,1组成,0X开头;例如:0x1001
八进制:逢八进一,由0、1.......7组成,0开头;例如:0111001
十进制:逢十进一,由0、1..........9组成;整数默认是二进制。
十六进制:逢十六进一,由0、1.....9,a,b,c,d,e,f组成,0b开头;例如:0b
进制转换
十进制转其它进制:
- 十进制数除以对应进制(2、8、16)取余数,直到商为0,然后余数反转排列得到对应的进制数
- 使用8421码,二进制由8个bit表示当八位都是1时每一位对应一个十进制数值,如下:
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
例如:
十进制:66 =64+2
所以二进制为:0x1000010 ,反向则可以使用二进制求出对应的十进制
二进制转八进制
- 使用二进制求出十进制,再使用取余求八进制
- 没三位二进制数代表一个八进制数,使用8421码从右到左每三位为一组算出对应的八进制数(左边不够补0),然后从左到右排列
例如:十进制:66
二进制:0x1000010 ,从左到右每三位为一组得到:001、000、010,使用8421码分别为1、0、2
所以八进制为:0102
二进制转十六进制
- 使用二进制求出十进制,再使用取余求十六进制
- 每四位二进制代表一个十六进制数,使用8421码从右到左每四位为一组算出对应的十六进制数(左边不够补0),然后从左到右排列
例如:十进制:66
二进制:0x1000010 ,从左到右每三位为一组得到:0100、0010,使用8421码分别为4、2
所以十六进制为:0b42
其它进制转十进制:
- 二进制直接使用8421码,八进制/十六进制使用原理求出二进制(上面第二种方法的反向运算)然后根据8421算出十进制
- 使用公式:把底数*基数权次幂相加
例如;十进制:128=8*10^0+2*10^1+1*10^2 得到公式:对应进制数=每一位上数字(系数)乘以对应进制(基数)的权(从左到右数第一位为0)次幂相加
有符号位的数据表示法:
在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的
求出对应位数的二进制数,最高位是符号位正数为0负数为1,即为原码
正数:
原码、反码、补码相同
负数:
反码=原码符号位不变其它位上的数取反即:0变1,1变0
补码=反码+1
Java程序执行中可以改变的数据
变量的分类
基本数据类型
- 整数 字节数 取值范围
byte 1 -128~127
short 2
int 4
long 8
- 浮点数
float 4
double 8
- 字符
char 2
- 布尔
boolean 1
引用数据类型
类、数组、接口
变量的定义
数据类型 变量名 = 变量值
注意:long/float定义时在变量值后面加上L/F
隐式类型转换
发生在低精度到高精度
当byte、short、char运算中不相互转换,但会系统自动提升为int、long、float、double去参与运算
强制类型转换
发生在高精度到低精度或者定义变量值大于变量的取值范围,会有失精度
数据类型 变量名 = (数据类型)变量值
例如:
//定义int类型 int num = 10; //强转为byte类型 byte num2 = (byte)num;不能对boolean进行转换只有true/false
符号:
= , +=, -=, *=, /=, %=
=为基本的赋值运算符,其他的为扩展的赋值运算符
- = 赋值号
- +=加赋值 把左边和右边的结果赋值给左边。 注意:左边不能是常量
- 扩展赋值运算符隐含强制类型转换
例如:
//定义short类型 short num = 20; num =num +1;//错误: 不兼容的类型: 从int转换到short可能会有损失 num+=1;//编译通过,等价于 num=(short)(num+1);
- 注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
- 注2:比较运算符“==”不能误写成“=” 。
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6 。
- “&”和“&&”的区别 单&时,左边无论真假,右边都进行运算。 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
- “|”和“||”的区别同理,双或时,左边为真,右边不参与运算
- 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
位运算是直接对二进制进行运算。
<<:就是将左边的操作数在内存中的二进制数据左移右边操作数指定的位数,右边被移空的部分 补0。相当于乘与2的倍数
>>:如果最高位是0,左边被移空的位就填入0;如果最高位是1,左边被 移空的位就填入1。相当于除以2的倍数
>>>:无论最高位是1还是0,左边被移空的高位都填入0。
得到结论:相当于乘以或者除以2的移动次数次幂。
位运算符的细节
位异或^的特点:对同一个数位异或两次,其值为这个数本身
例如:
10^2^2=10
格式:
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
例如:获取两个数最大值
//定义三个变量 int a=10,b=20,z; //使用z接受运算结果 z = (a>b)? a : b;三元嵌套:
获取三个数最大值
//定义四个变量 int a = 10,b = 20,c = 15,max; //使用max接收结果 max = (a>b)? ((a>c)? a : c) : ((b>c)? b : c);