自动转换原则
数据范围保存大的数据类型要转换为数据范围保存小的数据类型, 使用强制转换 (强制转型就是在变量的前面加括号, 在括号里写上需要强制要转的类型.)
数据范围保存小的数据类型可以自动转换为数据范围大的数据类型
- // 如果数据的大小没有超过 byte/short/char 的表述范围, 则可以自动转型.
- char c4 = 'a';
- int i = c4 + 2;
- char c5 = (char)i; // 强制转型
- System.out.println(c5);
- int a5 = 10;
- long a6 = 200;
- byte b2 = 100; // 如果数据的大小没有超过 byte/short/char 的表述范围, 则可以自动转型.
- // 测试自动转型和强制转型
- public class TestCast {
- public static void main(String[] args){
- /*
- byte b = 123;
- //byte b2 = 300;
- //char c = -3;
- char c2 = 'a';
- int i = c2;
- long d01 = 123213;
- float f = d01;
- System.out.println(f); //123213.0
- System.out.println(i); //97
- // 测试强制转型
- int i2 = -100;
- char c3 = (char)i2; //-100 超过 char 的表数范围, 所以转换成完全不同的值, 无意义的值!
- System.out.println(c3); //?
- */
- /*
- // 表达式中的类型提升问题
- int a = 3;
- long n = 4;
- double d = 5.3;
- int c = (int)(a+n); // 做所有的二元运算符 (+-/*%), 都会有类型提升的问题!
- float f = (float)(a + d);
- System.out.println(f1); // 8.3
- System.out.println(c); // 7
- */
- int money = 1000000000; //10 亿
- int years = 20;
- long total = (long)money*years; // 返回的是负数
- System.out.println(total); // 200 亿
- // 一个人 70 年心跳多少次
- long times = 70L*60*24*365*70;
- System.out.println(times); // 2575440000
- }
- }
来源: http://www.bubuko.com/infodetail-2837620.html