1 public class Demo03 {
2 public static void main(String[] args) {
3 /*
4 * 由于java是强类型语言,所以有时要用到类型转换
5 * 低------------------------------------->高
6 * byte,short,char->int->long->float->double
7 *
8 * 运算中,不同数据类型的数据要先转化为同一类型,然后进行运算
9 * 布尔值不能转换
10 * 强制转换的时候可能存在内存溢出或者精度问题!
11 * */
12 int a=12;
13 byte b=(byte)a;
14 System.out.println(a); //12
15 System.out.println(b); //12
16
17 int c=1111;
18 byte d=(byte)c;
19 System.out.println(c); //1111
20 System.out.println(d); //87
21 // 这里,之所以没有输出1111,是因为存在内存溢出问题,byte值是-127-128,超出的话会有错误
22 int money=10_0000_0000;
23 int year=20;
24 long total=money*year;
25 System.out.println(total); //-1474836480
26
27 long total1=money*((long)year);
28 System.out.println(total1); //20000000000
29 /*
30 * 上面的问题所在就是:
31 * 第一个是都以int的形式算完了,计算的时候已经溢出了,自然会报错
32 * 第二个是运算时就转换成了long,容量足够大,没有溢出
33 * */
34 System.out.println("--------------------------------------------------");
35 //以下根据Unicode表来对应的,所有字符本质还是数字
36 char z='a'; //字符型
37 int s=z+1; //整数型
38 System.out.println(s); //98
39 System.out.println((char)s); //b
40
41 //强制转换不会四舍五入,直接抹去小数位
42 System.out.println((int)1.88); //1
43 System.out.println((int)-1.88); //-1
44
45 }
46 }
下面的这个更通俗易懂
1 package base;
2
3 public class Demo05 {
4 public static void main(String[] args) {
5 //自动类型转换-->把一个范围小的数值或变量赋给另外一个表示数据范围大的变量
6 short smart=10;
7 int num=smart; //这里,int比short范围更大,所以自动转换
8
9 double d=10;
10 System.out.println(d); //10.0 这里因为10是int型,double比int大,能盛得下,所以自动转换了
11
12 //强制类型转换-->把一个范围大的数值或变量赋给另外一个表示数据范围小的变量
13 int large=10;
14 short num1=(short) large; //这里,因为变量是int,比short大,short无法接受,所以需要转换成short同级别或者比它小的
15
16 double xiaoshu=8.88;
17 int number=(int) xiaoshu;
18 System.out.println(number); //8
19 }
20
21
22
23
24 }