1:变量使用的注意事项
①、变量定义后可以不赋值,使用时再赋值。不赋值不能使用。
②、变量使用时有作用域的限制。
③、变量不可以重复定义。
2:数据类型转换(掌握)
(1)boolean类型不参与转换
(2)自动类型转化(默认转换)
范围小的数据类型值(如byte),可以直接转换为范围大的数据类型值(如int);
A:从小到大
B:byte,short,char-->int --> long --> float --> double
C:byte,short,char之间不相互转换,直接转成int类型参与运算。
注意:byte、short整数常量再定义时,接受的其实是一个int类型的整数,这个是自己做了一个数据检测,如果不在他们范围内就报错。
byte a=125;
(3)强制类型转换
范围大的数据类型值(如int),不可以直接转换为范围小的数据类型值(如byte)
A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型变量名 = (目标数据类型) (被转换的数据);
(4)思考题和面试题:
A:下面两种方式有区别吗?
floatf1 = 12.345f;
floatf2 = (float)12.345;
B:下面的程序有问题吗,如果有,在哪里呢?
byteb1 = 3;
byteb2 = 4;
byteb3 = b1 + b2;
byteb4 = 3 + 4;
C:下面的操作结果是什么呢?
byteb = (byte)130;(数据溢出计算)
计算机中数据的运算都是补码进行的。
而要得到补码,首先要计算出数据的二进制。
a:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
b:做截取操作,截成byte类型的了。
10000010
这个结果是补码。
c:已知补码求原码。
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
D:字符参与运算(是查找ASCII里面的值)
'a' 97
'A' 65
'0' 48
System.out.println('a');
System.out.println('a'+ 1);
E:字符串参与运算
这里其实是字符串的连接(“+”被重载,用作String的拼接符)
System.out.println("hello"+'a'+1);
System.out.println('a'+1+"hello");
System.out.println("5+5="+5+5);
System.out.println(5+5+"=5+5");
3:数据的表示
①、java中对常量提供了4种表现形式
二进制、八进制、十进制、十六进制
②、不同进制的组成和表示方法
二进制:由0、1组成,以0b开头
八进制:由0、1、2-7组成,以0开头
十进制:由0、1、2-9组成,默认为十进制
十六进制:由0、1、2-9、a-f(大小写均可)组成,以0X开头
③、进制转化
a、其他---》十进制
系数*基数^(权次幂)
权:从右向左(从零开始数)
b、十进制---》其他
除基取余,直到商为零,余数反转。
c、十进制---》二进制
8421码
d、二进制---》八进制、十六进制
Ⅰ:先二进制---》十进制,然后再十进制---》八进制、十六进制
Ⅱ:折合组合法:
从右往左,每三位用八进制数表示,转化为八进制
从右往左,每四位用十六进制数表示,转化为十六进制
4:有符号数据的二进制表示
最高位称为符号位,其余位为数值位
原码:正数的最高位为0;负数的最高位为1
反码:正数的反码与原码相同;负数的反码与原码符号位相同,数值位取反。
补码:正数的补码与原码相同;负数的补码是反码的基础上加1
5:字符常量表示
①、用英文单引号括起来的单个字符
②、用英文单引号括起来的十六进制字符代码值来表示单个字符。格式:‘\uXXXX’,u为约
定的前缀,XXXX是4位十六进制数,是该字符在Unicode字符集中的序号。
③、转义符
'\t' 制表符 '\n'换行符 '\r'回车符