Java中的数字学习
Java中的数字有 double、float、long、int、byte等,甚至char都可以转化成数字
?
学习良葛格老是的笔记,又有些领悟,真是书读百遍每回都不一样!
?
1. 默认类型
Java中写下的数字,默认会有一个类型,整数默认为int型,浮点数默认为double型。这一点非常容易犯错,理想中认为后面的数字应该服从我定义的类型
? 例如:
??? short a = 5;//编译报错
?
2. 大小限制
不要超过本身的最大最小值
? 例如:
??? int类型4B,最大2^31 - 1? 最小-2^31
??? 如果超出限制值,在直接赋值的时候会编译报错,但是在运算中不会报错,
? 例如:
??? int ageInt = 365 * 24 * 60 * 60 * 1000;//编译不会报错
?
3. 自动类型转化保护
在运算中,如果有更高的类型参与,那么运算中默认使用最高类型来保存运算。
但是运算是按照运算需要来转化的,而不是一次到位。在运算顺序还没有到达更高类型的时候,依然不会自动转型到最高类型。
? 例如:
??????? short shortN = 2;
??????? int intN = 2147483647;
??????? long longN = 3;
??????? long rs = longN * (shortN * intN);//here!!!
??????? System.out.println("rs:" + rs);
??? 在运算中先运算(shortN * intN),此时最高类型为int型,因此()运算结果保存为int型,而并没有一步到位为long型
?
? 再例如:
??????? long c = (long)1073741824 * 2;//先转型后运算
??????? long d = (long)(1073741824 * 2);//先运算后转型,此处没有(long)来转型也不会编译错误
?
?