标签(空格分隔): 课程笔记
1. 自动转换
byte short char可以转换成int,但是他们三个之间不能相互转换。
int 可以转换成long,需要在结尾添加l。
int可以转换成float,float 可以转换double。
特殊情况: long 可以转为float,但转换具有不确定性,不推荐。
int a=100; byte b=10; a=b; //将byte转为int
2. 强制类型转换
随便转换,但是会出现溢出等问题。
浮点数转为整数会舍弃小数部分。
boolean true/false ->1/0,分配一个字节存储。但是不能将其强制转换。
int a=500; byte b; b=(byte)a;
String类型不是基本数据类型,是属于引用数据类型。
引用数据类型:1.class(字符串在这里) 2.接口 3.数组。
String中加号是字符串拼接的意思
一个重要的例子:
int a=20; char b='a'; String c="1"; String ss; ss=a+b+c; //1171 前面a+b是int和char的整数运算,运算之后会和字符串c拼接 ss=c+a+b;//120a
3. 进制
二进制:正数:原码反码补码相同。
负数:反码:符号位不变,其他按位取反,补码:反码加一。
八进制:前面加个0。
十六进制:前面加0x。System.out.println
按照int型输出。
4. 运算符
算数运算中,byte short int char类型运算结果都是int型。
在运算中,有long类型存在,运算结果就是long类型。
如果在运算中有float类型,则结果为float,有long也是float。
如果有double类型,则结果为double类型。
boolean不能参与算数运算。
/ 取整。
% 取余:结果的正负与被除数保持一致.
&:逻辑与
|:逻辑或
&&:短路与
||:短路或
5. 思考题
short a=20; a=a+20; //这个会报错,因为a+20是int,转成short会报错 a+=20; //这个不会报错,因为这会进行强制转换 int i=1; i*=0.1; System.out.print(i); //0 int n=10; n=n+(n++)+(++n); /* n=10 n=10 前两个运算之后n++变成11,在进行第三个运算之前自加变成12,所以结果为10+10+12=32 */ System.out.print(n);
6. 骚操作
int i=10; i=i++; System.out.print(i); //输出为10 i=++i; System.out.print(i);//输出为11
7. 位运算符
针对二进制数据的每一位进行运算,
左移:补0,相当于乘以2的n次方,用于乘法运算效率很高
int a=0; a=2<<2;//
右移:相当于除以2的2次方,高位为0补0,为1补1
无符号右移:全部补0.
&:按位取与运算
|:按位运算
~:按照补码各位取反
8.三元运算符
公式?表达式1:表达式2
int a=4; int b=5; int c=a>b? a:b;
9.面试题型
1,比较三个数中最大值
int a=3; int b=5; int c=1; (a>b?a:b)>c?(a>b?a:b):c
2.交换值,不要中间值
int a=10; int b=2; a=a+b;//a=12 b=a-b;//b=10 a=a-b;//2 //----------------------------- a=a^b; //异或相当于消除和自身相同的数 b=a^b;//b=a a=a^b;// a^b^a=b