java学习笔记(2)
标签(空格分隔): 课程笔记
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