一,java的数据类型:
数据类型:同属来说是定义同一类型数据的操作总称;
数据类型分为:基本数据类型和引用数据类型;
1基本数据类型:
1,数值型:整数类型和浮点类型;
整数类型 byte(1字节),short(2字节),int(4字节),long(8字节);
浮点型:float(4字节),double(8字节)
2,字符类型 char(2字节)
3,布尔类型 boolean(1字节)
4,整型变量默认为int 类型,浮点型默认为double类型
注意:
1,char类型占两个字节,采用Unicode码。
2,所有的基本数量类型长度固定,在不同硬件和操作系统中不会发生改变
3,通常情况下,同一数据类型占用的字节数越大表示的数值范围越大,但是不同数据类型,占用的字节数相同,表示的范围不相同。
2引用数据类型:除了基本数据类型外,其他的都是引用数据类型
如:字符串类型,数组,枚举,类等都属于引用类型。
3基本数据类型转换:
自动类型转换:(从小到大)char->byte—>short—>int—>long->float—>double;
char默认情况下自动转换为int类型;
boolean不能和其他类型进行转换
强制类型转换:从大道小,和自动类型转换相反。
二,变量:
1,常量跟变量:
常量:通俗来说就是程序运行时不会发生改变的量;
变量:通俗来说就是程序运行时会发生改变的量;
2,变量的声明及其使用:
1变量声明以及赋值
方法一
数量类型 变量名 ;
变量名=变量值
如 int i;
i=10;
方法二
数据类型 变量名=变量值;
2变量的使用
在使用变量前必须要给变量赋值,否则编译不通过,因此在使用变量时,必须先声明变量和赋值。
例如:
int i;
Sysout.out.println(i);
错误写法,没有赋值
int i=10;
Sysout.out.println(i);
正确写法
3,变量的命名规则
1,变量必须以字母,"_"和"$"开头。
2,变量可以包含数字(不能放开头位置)和中文(强烈不建议使用)
3,除了"_"和"$"以外,不能使用其他特殊符号。
4,不能使用Java中的关键字(Java中有特殊含义的单词如 int class public等)
三,原码,反码,补码
原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。
正数的原码反码补码都是他本身,
负数的补码 在原码的基础上,符号位不变,其余各位取反
负数的补码:在补码的基础上加上1。
例如:5 原码反码补码都是(00000101)
-5 原码(10000101)反码(11111010)补码(11111011)
四,Java中的运算符作用及优先级
1,赋值运算符:
"=" 用于给变量赋值,把右边的表达式或者值赋给左边,如 int i=10;把10赋给i;
2,算术运算符:
"+" 数学中的(+)一样;
"-" 数学中的(-)一样;
"*" 数学中的(×)一样
"/" 数学中的(÷)一样
"%" 取余运算,相当于数学中两个数相除的余数
"++" 自增运算符 ++在前,先自增在运算,++在后,先运算在自增;
"--" 自减运算符 --在前,先自减在运算,--在后,先运算在自减;
注意:% 运算时 两个数相除,没有除尽时,余数的符号看被除数,被除数为正,余数为正,被除数为负,余数为负,被除数为0余数为0
3,关系运算符:
">" 大于
"<" 小于
">=" 大于等于
"<=" 小于等于
"==" 等于
"!=" 不等于
注意:关系运算符比较的结果是布尔类型,">"和"<" ,">=" ,"<=" 只能比较数值类型的变量,"==" ,"!=" 可以比较数值,布尔,引用类型,前面四个的优先级大于后面两个的优先级。
4,逻辑运算符
& 逻辑与 :两个操作数为true时,结果才为true,不管左边的值是否为false,右边的表达式都会进行运算
| 逻辑或 :两个操作数有一个为true,则结果为true,不管左边的值是否为true,右边的表达式都会进行运算
^ 逻辑异或:两个操作数相同,结果为false,两个操作数不同,结果为true
!逻辑非(逻辑反):操作数为true,结果为false,操作数为false,结果为true
&& 短路与:两个操作数为true时,结果才为true,左边的值为false,右边的表达式不会再进再行运算。
|| 短路或 :两个操作数有一个为true,则结果为true,左边的值为true,右边的表达式不会再进行运算
注意:操作数类型和运算结果都是布尔类型,优先级排行 !> &>^>|>&&>||
5,位运算符(二进制运算)
& 按位与: 两个操作数为1,结果才为1
| 按位或: 两个操作数, 有一个操作数为1
^ 按位异或:两个操作数相同为0,不相同为1
~ 取反 操作数为0,结果为1,操作数为1,结果为0
<< 左移 右侧空位补0
>>右移 左侧空位补符合位(最高位)
>>>无符合右移(左侧空位补0)如 -4>>>1 在int的情况下为2147483646,在long的情况下结果为9223372036854775806(byte,short 不能表示出结果,内存溢出,结果取值范围大于他们表示的范围)
总结:
1,按位与&:
两个数都为正,则直接进行操作数比较,都为1 则为1,反之为0, 如4(00000100)&5(00000101)结果为4(00000100)
两个数都为负 ,则:1 求负数的补码 ,2,对补码进行&运算,符合位不变,3 高位不变其余取反,最后一位再加1
如 -4(10000100)& -5(10000101)对应的补码为(11111100),(11111011),都为1 则为1,反之为0,结果为(11111000),高位不变其余取反,最后一位再加1(10001000)结果为-8(10001000)
两个数异号:1,求出负数的补码,2,和正数进行&运算,符合位也要进行运算,3直接求结果
如-4(10000100)& 5(00000101),-4的补码为(11111100)& 5(00000101)结果为4(00000100)
2,按位或 |:
两个数都为正,则直接进行操作数比较,有一个为1 则为1,反之为0, 如4(00000100)|5(00000101)结果为4(00000101)
两个数都为负 ,则:1 求负数的补码 ,2,对补码进行|运算,符合位不变,3 高位不变其余取反,最后一位再加1
如 -4(10000100)| -5(10000101)对应的补码为(11111100),(11111011),一个为1 则为1,反之为0,结果为(11111111),高位不变其余取反,最后一位再加1(10000001)结果为-1(10001000)
两个数异号:1,求出负数的补码,2,和正数进行|运算,符合位也要进行运算,符合位不变,3 高位不变其余取反,最后一位再加1
如-4(10000100)| 5(00000101),-4的补码为(11111100)| 5(00000101)结果为(11111101)符合位不变,高位不变其余取反,最后一位再加1 结果为-3(100000011)
3逻辑异或 ^ :
两个都为正数:直接对两个数进行^运算 如4(00000100)^5(00000101)结果为 1(00000001)
两个数都为负 ,则:1 求负数的补码 ,2,对补码进行^运算,符合位不变,3 直接得结果
如 -4(10000100)^-5(10000101)对应的补码为(11111100),(11111011),相同为0,不同为1,结果为7(00000111)
两个数异号:1,求出负数的补码,2,和正数进行^运算,符合位也要进行运算,符合位不变,3 高位不变其余取反,最后一位再加1
如-4(10000100)^ 5(00000101),-4的补码为(11111100)^ 5(00000101)结果为(111111001)符合位不变,高位不变其余取反,最后一位再加1 结果为-7(10000111)
4取反~
如果为正数,1直接对值进行~运算,得到一个负数的原码,在转换为补码
例如:~4(00000100) , 操作数为0,结果为1,操作数为1,结果为0 ,结果为 (原码(11111011—>反码(10000100)—>补码-5(10000101))计算机存储的方式是补码所以结果为-5
如果为负数,1将负数转换为补码的形式,对补码进行~运算,得到结果
例如:~-4(10000100)—> 反码(11111011)—>补码(11111100) 操作数为0,结果为1,操作数为1,结果为0 ,(00000011)
5左右移:
正数的左右移:
有无符号,都直接在原码的基础上移动,求出结果即可
负数的左右移:
有符号的左右移:步骤 1 求负数的补码 ,2 将补码左右移,3 高位不变其余取反,最后一位再加1
无符号的左右移:步骤 1求出负数的补码 ,2 将补码左右移,3 直接求结果
6三元运算符
格式为
条件?表达式1:表达式2;
条件为true,执行表达式1,条件为 false执行表达式2。
相当于单个的if-else结构
7java中的优先级顺序: