类型转换 :
顾名思义就是不同类型变量之间的相互赋值
4.毫不相干的类型不能转换,比如 int 和 boolean
int a = 10;
long b = a;
long表示的范围更大,可以将int赋值给long,但不能将long赋值给int
强制转换 :long a = 10;
int b = (int)a;
int a = 0;
double b = 10.5;
a = (int)b;
double表示的范围更大,可以将double赋值给int,但赋值之后10.5变成10了,导致精度丢失
赋值的时候Java自动检查字面值符不符合该类型取值范围:
byte a = 100;//编译通过
byte b = 256;//编译错误
byte表示的数据范围是-128 ~ +127,使用字面值常量赋值的时候,Java会自动进行一些检查校验,判定赋值是否合理
数值提升:
int a = 10;
long b = 20;
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过.
byte 与 byte 运算:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b); //虽然是同类型,但自动提升为int类型,所以这里强制转换
计算机在处理byte这种小于4个字节的运算时,会提升为4个字节的int类型,再计算
Java可以将字符串通过包装类和方法转换成整数,比如:
int 与 String 相互转换:
//int转换成String
int num = 10;
String str1 = num + "";
String str2 = String.valueOf(num);
//String转换成int
String a = "100";
int b = Integer.valueOf(a);
运算符
算术运算符
1、基本的四则运算符: + - * / %
需要注意的是:
- 0不能作为除数
- %表示取余
2、增量赋值运算符:+= -= *= /= %=
int a = 10;
a += 1;//等价于 a = a + 1;
增量运算符会帮忙进行强制类型转换,比如:
short a = 1;
a = int(a+1);
等价于
short a = 1;
a += 1;
3、自增/自减运算符:++ --
int a = 10;
a++;//跟++a一样
在下面情况下,a++与a--情况不一样
int a = 10;
int b = a++;//b = a,a = a + 1,先使用,后++
a = 11,b = 10
int a = 10;
int b = ++a;//a = a + 1,b = a,先++,后使用
a = 11,b = 11
关系运算符:== != < > <= >=
“=”是赋值,“==”是相等
关系运算符的表达式返回值都是 boolean 类型
int a = 1;
int b = 2;
System.out.println(a == b); //false
System.out.println(a != b); //true
System.out.println(a < b); //true
System.out.println(a > b; //false
System.out.println(a <= b); //true
System.out.println(a >= b); //false
逻辑运算符:&& | | !
逻辑运算符的结果和返回值都是boolean类型
格式为 (表达式1 && 表达式2)
& 和 | 也算逻辑运算符,但是跟&& 和 || 相比,不支持短路求值,所以不推荐使用
&& :逻辑与/且(有真则真)
| | :逻辑或/或(有假则假)
! : 非/逻辑非
&& 和 || 都有短路求值的特点,比如:
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
对于&&来说,如果表达式1为假,就不会执行表达式2,直接判定为false
对于| | 来说,如果表达式1为真,就不会执行表达式2,直接判定为true
位运算符:& | ^ ~
位操作表示 按二进制位运算,进行按位运算,首先需要将数字转换成二进制
按位与 & :
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
按位或 | :
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
按位取反 ~ :
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
按位异或 ^ :
如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
移位运算符:<< >> >>>
都是按照二进制来计算的
左移 << :
最左侧位不要了, 最右侧补 0
右移 >> :
最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>> :
最右侧位不要了, 最左侧补 0
条件运算符:表达式1 ? 表达式2 : 表达式3
也叫做三目运算符
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式 3 的值