一、基本数据类型转换特殊点
特殊点一
在byte取值范围内的数据可以直接赋值,超过byte取值范围的数据会进行强制转型。
byteb1=1;
byteb2=(byte)128;
/*128为int型,强制转换后会舍弃最左侧位数。
int-128:0000,0000,0000,0000,0000,0000,1000,0000
(byte)128:1000,0000
最高位为符号位*/
特殊点二
超出变量取值范围的数据会报错。
inti=12345678901;//超出取值范围系统报错
特殊点三
long型数据后面要加L。
long1=12345678901;//报错:12345678901为int型数据,超出取值范围
long2=12345678901L;//不报错,long型数据,在取值范围内
特殊点四
自动转型:低精度到高精度;强制转型:高精度到低精度。
floatf1=1.0;//强制转型,double->float
doubled1=1.0f;//自动转型,float->double
floatf2=1;//自动转型,int->float
//在定义变量时尽量不进行强制转换,强制转换效率低。
特殊点五
java使用UniCode编码。
charc='a';
inti=c;//自动转换,i=97
特殊点六
boolean不能与其他类型兼容。
booleanbool=true;
inti=(int)bool;//报错,不兼容。
二、算术运算符的使用
符号
加 | 减 | 乘 | 除 | 取余 | 自增 | 自减 |
+ | - | * | / | % | ++ | -- |
注意事项
++a与a++的区别:++a先自增再使用;a++先使用再自增。
inta=10;
a=(++a)+(a++)+(a*2);
//++a,a=11; a++,a=11; a*2=24
System.out.println(a);//a=46
特殊点
特殊点一
byte类型和short类型在运算时会自动向上转型为int,最高位补0。
其余类型按照取值范围大的转型。
byteb=10;
shorts=10;
inti=65535;
floatf=10.0f;
doubled=10.0;
System.out.println(i+f);//65545.0-float型
System.out.println(s+i);//65545-int型
特殊点二
浮点类型不能直接运算。
char类型做运算时使用UniCode编码做数字运算。
特殊点三
自增的底层逻辑:
inti=1;
++i;
i=(int)(i+1);//效果等同于++i
三、赋值运算符
inti=1;
i=2;//i=2
i+=2;//i=4,i=i+2
i-=2;//i=2,i=i-2
i*=2;//i=4,i=i*2
i/=2;//i=2,i=i/2
i%=2;//i=0,i=i%2
四、关系运算符
booleanbool=5==3;
System.out.println(bool);//false
System.out.println(5>3);//true
System.out.println(5>=3);//true
System.out.println(5<3);//false
System.out.println(5<=3);//false
System.out.println(5!=3);//true
System.out.println(5==3);//false
五、Scanner类
importjava.util.Scanner;//导入Scanner包
Scannerscan=newScanner(System.in);//创建Scanner类的对象
inti=scan.nextInt();//输入int型数据
inti=scan.nextDouble();//输入double型数据
inti=scan.next();//输入String型数据
六、字符串拼接符
System.out.println(1+2+"asd"+1+2);//输出3asd12,一边带字符串+就为拼接符
七、逻辑运算符
&与&&的区别:&运算符两边都要判断,&&判断运算符左边出现结果后不再继续判断。
^异或:不同为1,相同为0。
八、三目运算符
//键盘输入两个数字,获取出最大值
Scannerscan=newScanner(System.in);
System.out.println("请输入第一个数:");
intn1=scan.nextInt();
System.out.println("请输入第二个数:");
intn2=scan.nextInt();
intn=(n1>n2)?n1:n2;//表达式为true输出前一个变量,表达式为false输出后一个变量
System.out.println(n);
//扩展1
inta=5;
System.out.println((a<5)?10.9:9);//输出9.0
//输出类型为变量中取值范围大的那一个
//扩展2
charx='x';//Unicode -- 120
System.out.println(false?100:x);//输出x
System.out.println(false?100000:x);//输出120
//一个变量一个常量时,判断常量是否在变量所属类型的取值范围内
//在 -- 按照变量类型返回数据 不在- 按照常量类型返回数据
九、位运算符
与运算&:同位比较,相同为1,不同为0;
0000,0000 & 0001,1101--->1110,0011
或运算|:同位比较,有1为1,无1为0;
0000,0000|0001,1101--->0001,1101
异或运算^: 同位比较,不同为1,相同为0;
0000,0000|0001,1101--->0001,1101
左移<<:整体向左移动,低位补0;
0000,1100<<2 ----->0011,0000
右移>>:整体向右移动,高位补符号位;
0000,1100>>2------>0000,0011
1000,1101>>2----->1110,0011
无符号位右移>>>:整体向右移动,高位补0;
1000,0110>>2----->0010,0001