一、理解类型转换
Java作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。
1.int 和long/double相互赋值
long数据范围为-2
public class TestDemo2 {
public static void main(String[] args) {
int a = 10;
long b = 20;
double c = 1.0;
a = b;//编译出错
b = a;//编译通过
a = c;//编译出错
c = a;//编译通过
}
}
long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.
2.int和boolean相互赋值
public class TestDemo2 {
public static void main(String[] args) {
int a = 10;
boolean b = true;
b = a;//编译出错,不兼容
a = b;//编译出错,不兼容
}
}
int 和 boolean 是毫不相干的两种类型, 不能相互赋值.
3.int字面值常量给byte赋值
public class TestDemo2 {
public static void main(String[] args)
byte a = 100;//编译通过
byte b = 256;//编译出错
}
}
byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内。
二、理解数值提升
1.int与long混合运算
public class TestDemo2 {
public static void main(String[] args) {
int a = 10 ;
long b = 20;
int c = a + b;//编译出错
long d = a + b;//编译通过
}
}
当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来
接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.
2.byte与byte的运算
public class TestDemo2 {
public static void main(String[] args) {
byte a = 20;
byte b = 21;
byte c = a + b;
System.out.println(c);
}
}
Error:(5, 20) java: 不兼容的类型: 从int转换到byte可能会有损失
byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.
byte c = (byte)(a + b);
41
三、int与String之间的相互转换
1.int转成String
public class TestDemo2 {
public static void main(String[] args) {
int num = 10;
//方法一
String str1 = num +"";
//方法二
String str2 = String.valueOf(num);//将十进制转换为数字字符串
}
}
2.String转成int
public class TestDemo2 {
public static void main(String[] args) {
String str = "100";
int num = Integer.parseInt(str);//将数字字符串转换为十进制数
}
}