JAVA这几种数据类型,可否串门?入了人家门,就得按人家规矩来,入乡随俗哦,不免发生有自觉的 还有不情愿被动的。测试
自动类型转换:容量小的数据类型能够自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。spa
特例: 能够将整型常量直接赋值给byte, short, char等类型变量,而不须要进行强制类型转换,只要不超出其表数范围code
Short b = 12; //合法 short b = 1234567; //非法
强制类型转换,又被称为造型,用于显式的转换一个数值的类型. 在有可能丢失信息的状况下进行的转换是经过造型来完成的,但可能形成精度下降或溢出。对象
强制类型转换的语法格式:“(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型。blog
double x = 3.14; int nx = (int)x; //值为3 char c = 'a'; int d = c+1; System.out.println(d); System.out.println((char)d);
当将一种类型强制转换成另外一种类型,而又超出了目标类型的表示范围,就会被截断成为一个彻底不一样的值。ast
int x = 300; byte bx = (byte)x; //值为44
不能在布尔类型和任何数值类型之间作强制类型转换。class
若是须要把布尔类型转换成一个数字该怎么办呢?变量
1.操做比较大的数时,要留意是否溢出,尤为是整数操做时。数据类型
int money = 1000000000; //10亿 int years = 20; int total = money*years; //返回的是负数 long total1 = money*years; //返回的仍然是负数。默认是int,所以结果会转成int值,再转成long。可是已经发生了数据丢失 long total2 = money*((long)years); //先将一个因子变成long,整个表达式发生提高。所有用long来计算。
2. 眼神很差使用L和l 注意哦,别和1混淆了(不要命名名字为l的变量,long类型使用大写L不要用小写)语法
int l = 2; long a = 23451l; System.out.println(l+1);
代码
//测试自动转型和强制转型 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; //测试强制转型 int i2 = -100; char c3 = (char)i2; //-100超过char的表数范围,因此转换成彻底不一样的值,无心义的值! System.out.println(c3); //表达式中的类型提高问题 int a = 3; long b = 4; double d = 5.3; int c = (int)(a+b); //作全部的二元运算符(+-/*%),都会有类型提高的问题! float f = (float)(a + d); int money = 1000000000; //10亿 int years = 20; long total = (long)money*years; //返回的是负数 System.out.println(total); //一我的70年心跳多少次 long times = 70L*60*24*365*70; System.out.println(times); } }
固然以上都是皮毛,其实万事皆可盘,那么类型转换呢,什么对象均可以去尝试转换,这之后说哦