1. 运算符和表达式
- 运算符:对字面量(常量)或者变量进行操作的符号
- 表达式:用运算符把字面量或者变量连接起来,且符合java语法的式子就可以称之为表达式。
2. 运算符包含:算术运算符,自增自减运算符,赋值运算符,关系运算符,逻辑运算符,三元运算符。
- 算术运算符:+ - * / %(取余/取模)
注意:
* 在代码中,如果有小数参与运算,结果可能会不精确。原因会在Javase中进行讲解。
* 在代码中,如果只有整数参与运算,结果只能是整数,想要得到小数,必须有浮点数(小数)参与运算。
* /和%的区别:两个都是数据做除法,/是取结果的商,%是取结果的余数。
Tips:数值拆分的公式:
个位:数字 % 10
十位:数字 / 10 % 10
百位:数字 / 100 % 10
千位:数字 / 1000 % 10
…
3. 类型转换分为:隐式转换,强制转换
- 隐式转换(自动类型提升):取值范围小的数值转换为取值范围大的数值。
- 隐式转换注意点:
* 取值范围:double > float > long > int > short > byte
* 什么时候转换:数据类型不一样,不能直接进行计算,需要转换成一样的数据类型才可以进行计算(转换只是变量的值进行转换,变量本身并不发生改变)
* 转换规则1:取值范围小的,和取值范围大的进行计算,小的会先提升为大的,再进行计算
* 转换规则2:byte short char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。关系运算符也是计算,其中char类型会查询ASCII码表,再提升为int。 - 强制转换:取值范围大的数值转换为取值范围小的数值。
- 强制转换注意点:
* 不允许将取值范围大的数值直接赋值给取值范围小的变量,但如果一定要这么做,就要加入强制转换。
* 格式为:目标数据类型 变量名 = (目标数据类型)被强制转换的数据;
例如:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
// a 和 b都是byte变量,在进行运算时,先提升为int,再进行计算,结果为int类型,大转小需要进行强制类型转换
byte d = 10 + 20;
// 10+20并不是变量,直接将10+20的结果30作为byte类型数据,直接赋给d,不涉及强转
* 当被强制转换的数据过大,超出目标数据类型的取值范围时,转换后的数据会出现错误。
- int类型数据可以直接赋值给char类型变量,但若一个方法的返回值是int类型,那么不能将这个方法的返回值直接赋值给char类型变量,例如:
Random r = new Random();
Scanner sc = new Scanner(System.in);
char a = 65;// ‘A’
char b = 3 + ‘g’;// ‘j’
char c = r.nextInt(4);//程序报错
char d = sc.nextInt();//程序报错