原理:取值范围小的数据类型可以直接赋值给取值范围大的数据类型,会自动完成转换
其中char类型自动转换成int类型
形式:
byte a = 2; int b = a;
注意:注意char也是可以转换成int的
char ch = '中'; int code = ch; // 原理是字符会按照ACSII字符编码转换成数字再转换成2进制最后完成类型转换2. 表达式类型转换
原理:在表达式中,小范围的数据类型会自动变成表达式中最大的数据类型进行换算
结论:表达式的最终结果由表达式中取值范围最大的数据类型决定
注意:byte,short,char都是自动转换成int类型来运算的
byte,short,char==>int==>long==>float==>double
面试笔试题:
byte a =1; byte b =2; // 请问下面的是正确的吗? byte c = a + b; // 答上面这样的写法是错误的,应当这样写 int c = a + b; // 或者这样写 byte c = (byte)(a + b);3. 强制类型转换
原因:如果需要取值范围大的数据类型转换成取值范围小的数据类型,则需要强制转换才行
格式:小范围数据类型 变量名 = (小范围数据类型)大范围变量/数据
int a =120; byte b = (byte)a;
注意:
- 强制类型转换会发生数据损失
- 小数类型的数据转换成整数类型的数据会把小数点后面的数值去掉,只保留整数部分
double a = 99.58; int b = (int)a; // b = 99二,运算符 1,赋值运算符
- =
将右边的值/变量赋值给左边的变量 - +=
a += b; 等价于 a = (int)a + b - -=
a -= b; 等价于 a = (int)a - b - *=
a *= b; 等价于 a = (int)a * b - /=
a /= b; 等价于 a = (int)a / b - %=
a %= b; 等价于 a = (int)a % b
注意:自带自动类型转换
byte a = 5;byte b = 8; a += b; // 等价于 byte a = (byte)(a + b);2,+ 符合连接符
场景:在字符串与其他类型之间用+符号,此时为连接符,最后的结果为字符串。
规律:能算则算,不能算则连在一起。
String name = "中国人"; int num = 666; System.out.println(name + num + 6); // 中国人66663,算术运算符
" + - * / % "
加,减,乘,除,取余
3,自增自减运算符注意:整型相除其结果一定是整型,会把小数点后面的尾部砍掉。
注意事项:
- 只能对变量进行操作自增自减,不能对字面量和常量进行操作
- 在单独使用时,在前在后都是一样的,没有区别 a++ a++
- 但是要不在单独使用时,前后是有区别的
在前 int b = ++a + 2; 则是先进行变量a的自增,再和 2 相加,最后结果 4 赋值给变量b。b = 4; a = 2;
在后 int b = a++ + 2; 则是先使用变量a和 2 相加,结果赋值给b,最后再变量a自身+1。 b = 3; a =2;
定义:是对数据进行条件判断的符号,最终比较后的结果是布尔类型(true , false)
与:
单与(逻辑与)& ,双与(短路与)&&:且的意思,必须左右都是true其结果才是true,有一个是false则结果为false。
两者区别是:& 左边是false 还是会继续执行右边的最后再判断,而 && 则如果左边是false 右边则不会再执行,直接返回false。
或:
单或(逻辑或)|,双或(短路或)||:或的意思,左右有一个是true其结果则是true。
两者区别是:| 左边是ture 还是会继续执行右边的最后再判断,而 || 则如果左边是true 右边则不会再执行,直接返回ture
取反:!
例如:!false = true; !true = false; 你真我假,你假我真。
异或 ^
两边一样返回false,两边不一样则返回true,就像两男在一起为假,一男一女在一起则为真
格式:条件表达式 ?值1:值2;
三元运算符是可以嵌套的,例如:
7,运算符的优先级比较三个数中最大的值并输出:有两种写法
int temp = num1 > num2 ? num1 : num2; int rsMax =temp > num3 ? temp : num3; int rsMax1 =num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3);



