1.基本类型的类型转换
1)自动类型转换
由字节数少的向字节数多的转换,转换的具体过程如下:
byte a = 2;
int b = a;
0000 0010
0000 0000 0000 0000 00000 00000 0000 0001
因为int类型数据是由4个字节组成的,而byte类型数据是1个字节,转换的时候则补全4个字节。
示例:
public class Demo01 {
public static void main(String[] args) {
//由byte→short→int→long类型转换,类型自动提升,且不会报错
byte a = 1;
short b = a;
int c = b;
long d = c;
System.out.println("a =" + a);
System.out.println("b =" + b);
System.out.println("c =" + c);
System.out.println("c =" + c);
}
}
运行结果:
2)强制类型转换
自动提升的反方向则为强制类型转换,格式:(typeTarget)value。
注意:由于强制转换是“缩小转换”,所以有可能损失精度。
示例:
public class Demo01 {
public static void main(String[] args) {
//由long→int→short→byte类型转换,类型需要强制转换,否则会报错
long a = 1;
int b = (int) a;
short c = (short) b;
byte d = (byte) c;
System.out.println("a =" + a);
System.out.println("b =" + b);
System.out.println("c =" + c);
System.out.println("c =" + c);
}
}
运行结果:
3)表达式的类型提升
当一个算术表达式中包含多个基本类型的数据,整个算数表达式的数据就会自动发生提升。比如:表达式中包含byte,short,int类型的数据,那么表达式就会整体提升为int类型的。
示例:
public class Demo01 {
public static void main(String[] args) {
byte a = 3;
short b = 2;
int c = 2;
System.out.println(a + b + c);//a + b + c 结果自动提升为int类型
System.out.println((a + b + c) + " "); //结果会提升为字符串类型
}
}
运行结果:
2.运算符
Java中的运算符是一种特殊的符号,用来表示数据的运算,赋值和比较等等。主要有以下几种:
1)算术运算符
示例:
public class Demo01 {
public static void main(String[] args) {
//加法
int a = 1 + 2;
//减法
int b = 1 - 2;
//乘法
int c = 1 * 2;
//除法
int d = 1 / 2;
//求余
int e = 1 % 2;
//先赋值,后自加
int f = a++;
//先自加,后赋值
int g = ++a;
//先赋值,后自减
int h = a--;
//先自减,后赋值
int i = --a;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
System.out.println("e = " + e);
System.out.println("f = " + f);
System.out.println("g = " + g);
System.out.println("h = " + h);
System.out.println("i = " + i);
}
}
运行结果:
2)赋值运算符
示例:
int a = 1;
int b = a;
System.out.print("a = " + a + ",b = " + b);
运行结果:
3)位运算符
按位与,按位或,按位异或
第一个操作数 |
第二个操作数 |
按位与 |
按位或 |
按位异或 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
~非运算: 只操作一个数,在计算机底层运算,运算原理:源码除符号位外取反得到反码,反码加1得到补码,再取 反。
<< 左移运算符: 左移后的空位用0补充
>>右移运算符: 右移后如果是负数用1补充,如果是正数用0补充
>>>无符号右移运算符: 右移后用0补充
注意:
示例:
public class Demo01 {
public static void main(String[] args) {
int a = 5;
int b = -5;
System.out.println("按位与: a&b = " + (a&b));
System.out.println("按位或: a&b =" + (a&b));
System.out.println("按位异或: a^b =" + (a^b));
System.out.println("非运算:a = " + (~a) + ",b = " + (~b));
System.out.println("左移运算:a = " + (a<<1) + ",b = " + (b<<1));
System.out.println("右移运算:a = " + (a>>1) + ",b = " + (b>>1));
System.out.println("无符号右移运算:a = " + (a>>>1) + ",b = " + (b>>>1));
}
运行结果:
4)比较运算符
注意:
示例:
public class Demo01 {
public static void main(String[] args) {
int a = 5;
int b = -5;
int c = 5;
System.out.println("a > b: " + (a > b));
System.out.println("a < b: " + (a < b));
System.out.println("a == b: " + (a == b));
System.out.println("a == c: " + (a == c));
System.out.println("a >= c: " + (a >= c));
System.out.println("a <= c: " + (a <= c));
}
}
运行结果:
5)逻辑运算符
示例:
public class Demo01 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
//&&:全部都是true,才返回true,否则返回false,有一组是fale,就不在比较下去
System.out.println("a && b: " + (a && b));
//&:作用与&&相同,区别:全部比较完
System.out.println("a && b: " + (a && b));
//||:有一个是真则返回真
System.out.println("a || b: " + (a || b));
//|:作用与|相同,区别:全部比较完
System.out.println("a | b: " + (a | b));
//!:true则返回false,反之相同
System.out.println("!a: " + a);
//^:两个不同时才返回true
System.out.println(" a ^ b: " + (a ^ b));
}
}
运行结果:
6)三目运算符
示例:
public class Demo01 {
public static void main(String[] args) {
int a = 10;
int b = 12;
System.out.println(a > b? "a大于b" : "a 小于 或等于 b");
}
}
运行结果:
3.运算符的优先级
其中instanceof和type和继承有关系