java-2023-11-30

发布时间 2023-11-30 21:33:03作者: migui

1、java中char类型由于使用Unicode编码所以是占两个字节而并不像C中是占一个字节。

2、java中不使用0或非0值来代表假或真而是直接使用false或true。

3、java中float和double由于精度不同不能进行比较,否则存在两值明显不等但输出的比较结果却为true的风险。

4、如果运算结果可能超过int取值范围±21亿时应当在运算结果末尾加L转为更大范围的long类型。

5、windows的cmd中编译.java文件提示的错误内容出现汉字乱码时需要将.java文件转为ANSI编码(譬如notepad++就有)。

6、左右操作数都为整型然后进行整除运算,譬如31/3,其运算结果为10,假设不使用int而使用double类型对其运算结果进行保存,即double result=31/3,result最后输出实际为10.0,而并不能得到输出10.3...,为得到此结果,需要改为double result=31.0/3。

7、左右操作数中有一个为负数,取余运算的结果的负号跟随左操作数,譬如-10/3=1,但是10/(-3)=1。

8、如果char b='3',执行(b+4)并不能得到"34",而是得到55(因为字符'3'对应的十进制为51,详见附录1),虽然使用了+连接符,但是它是针对字符串的,所以需要改进为(""+b+4)并执行就能输出得到"34"。

9、正常情况下分母是不允许为0的,所以表达式写成3/0会报错,但是线与&&的特性是只要左操作数为false就不再进行后续判断了(即不继续右操作数的判断,类似还有线或||,不过||则是当左操作数为true便不再继续后面判断了),所以这时写成(6<5)&&((4>3)/0),也就不引发错误了。

10、byte的范围(-27)~(27-1)进行分段理解即(-128~-1、0、1~127)。

11、与&、或|各自含有两层含义,既代表逻辑运算符又代表位运算符(也就是一对二的关系),当左右操作数为逻辑表达式时取义为逻辑运算符,当左右操作数为数值时取义为位运算符,但是逻辑非为!,位运算非为~。

12、计算一个活了100岁的人的总心跳数(假设一分钟跳75下),定义成了int num=75*60*24*365*100,由于int取值范围为±21亿,大概估算就知道num已经超出范围,如果不做任何修改直接打印num,超出取值范围后输出一般为负数,如果改为long num=75*60*24*365*100,是不是就能正确输出了呢?结果并不是,还是输出负数,因为在运算75*60*24*365*100时参与运算的每个数值最大不超过int,而此时又没有额外人为指定数据类型所以默认使用int承接最后的运算结果,等运算结果出来才赋给的num,赋值已经是第二步(应该可以代为理解成int*int*int*int*int在先,赋值在后【但是注意不能认为是int开5次方,因为平常运算一个普通算式,假设y=3*4,也没有人强调说过y的范围不是-231~(231-1)了而变成了[-231~(231-1)]*[-231~(231-1)]】),此情况和前述第6点类似。

附录1:ASCII码表,来自http://www.xuandaima.com/HTML/201.html,如下图。