关键字
保留字
标识符
变量
变量的分类
字符串是 类 类型的。
变量的类型详解
整型
浮点型
float表示数值的范围比long还大
字符型
ASCII码
布尔类型boolean
在JAVA中,true就是true,不是非零;false就是false,并不是零,和c语言有点区别
基本数据类型转换
自动类型提升运算
强制类型转换(即自动类型提升运算的逆运算)
截断操作,损失精度
二进制层面,byte最大127,128溢出了,又变成-128了
变量运算的两个特殊情况
编译失败是因为数后面没加L,默认分配给这个数4字节的int空间,由于四字节装不开,就报错了,如果末尾加上L,就分配8字节的long类型空间,就能装开不报错了。这个分配的int空间如果数够用就不用加L。
数12.3默认是double类型,如果赋给float必须要在末尾加f。
1默认是int型,所以b+1是int 型,不能赋给byte,12.3默认是double型,b+12.3不能赋给float类型,会报错或者造成精度损失。
String
加号 + 前后只要有一个是String,就是连接符,否则就是加法运算。
例题1:
加号 + 前后只要有一个是String,就是连接符,否则就是加法运算。
例题2:
** * 星号的ASCII码是42
‘\t’ 制表符的ASCII码是9
’ '单引号内是字符 char类型
" "双引号内是字符串,String类型**
解释:
1、第一行正常输出,
2、第二行三个字符相加,输出int型42+9+42=93
3、第三行前两个相加由于第二个是String类型 所以是连接符,输出星号制表符星号
4、第四行前两个是字符型所以相加输出int型 42+9=51,再加一个String类型,就是起连接符作用
5、第五行后两个相加是连接符String类型,在和第一个相加还是String类型。(String和其他类型相加还是String类型)
典型例题:
进制
程序编写用2 10 8 16 进制,
程序输出结果时都是10进制输出
小细节(涉及底层):
int是32位的,byte是8位的,
计算机是用补码存储信息的。
在byte下, 1000 -0000 是-128的意思,
在int下,0000-0000 0000-0000 0000-0000 1000-0000 是128,强转为byte后只保留最后8位 1000-0000,也就是-128了。
运算符
+= 运算时不会改变变量本身的数据类型,就是 short型 s1 和int型 2 通过+= 运算时 仍然是short型
示例:
练习1:
1*0.1=0.1 由于还是int类型,就变成0,++后就变成了1
练习2:
练习3:
答案是n=32
比较运算符
注意第二个输出,先把 j 赋值给 i ,在输出 i的值。
逻辑运算符
& 和&&的唯一区别
| 和|| 的唯一区别
开发中建议使用 && 和 ||
位运算符
21<<2 =21✖2✖2=84
一些举例:
三元运算符
运算符优先级
Java有没有goto
答:java中的保留字,现在没有在java中使用
三元运算符的自动类型转化
第一题
public class yunsuanfu {
public static void main(String[] args) {
int a = 5;
System.out.println("value is "+((a<5) ? 10.9 : 9));
}
}
如果你觉得输出的结果是9,那就中了这道题的陷阱了,注意下“((a<5) ? 10.9 : 9)”,里面有一个10.9,
而后面跟了一个9,这是java就会根据运算符的精确度类型进行自动类型转换,由于前面有一个10.9,
所以后面的9会被转换成9.0,所以输出的是9.0.
第二题
public class yunsuanfu {
public static void main(String[] args) {
char x='x';
int i =10;
System.out.println(false ? i : x);
System.out.println(false ? 10 : x);
}
}
输出的结果是:120 x
int i=10;中i是一个变量,所以第一个输出x被强制转换成int型了,应为i是int类型,x存储的字符x的值转换成int值是120,所以第一个输出120。
至于第二个输出,java规范中提到,当后两个表达式有一个是常量表达式(上面指10),另外一个类型是T(上面指char)时,而常量表达式可以被T表示时,输出结果是T类型。
因为10是常量,可以被char表示,输出的结果是char型的,所以是x。