为什么?
-
Java属于强类型语言,在进行有些运算时需要用类型转换
低-->byte,short,char-->int-->long-->float-->double-->高
如何解决?
-
使用方法:不同类型的数据先转化成同一类型再进行运算
-
强制类型转换:高——>低 //强制转换 (类名)变量名
-
自动类型转换:低——>高 //不需要转换
-
示例
public class Demo004{
public static void main(String[] args) {
//强制转换 格式:(数据类型)变量名 高-->低
int num0 = 128; //定义int类型变量
byte num1 = (byte)num0; //强制转换,高转低时超出范围
System.out.println(num0); //128
System.out.println(num1); //-128
//自动转换 低-->高
int num2 = 128;
double num3 = num2; //自动转换,低转高自动转换
System.out.println(num2); //128
System.out.println(num3); //-128
/*
* 注意点:
* 1.布尔值不能够转换(低转高和高转低都不行);
* 2.对象类型不能转换不相干的类型(如);
* 3.把高容量转换低容量时,需要用到强制转换;
* 4.转换的时候可能存在内存溢出,或者是精度问题。
*/
//*************************我是分割线*******************************//
System.out.println("\n//*************************我是分割线*******************************//\n");
System.out.println((int)23.7); //23
System.out.println((int)-45.89f); //-45
//*************************我是分割线*******************************//
System.out.println("\n//*************************我是分割线*******************************//\n");
char name0 = 'a';
int num4 = name0 + 1;
System.out.println(num4); //98(显示为数字)
System.out.println((char) num4); //b
//*************************我是分割线*******************************//
System.out.println("\n//*************************我是分割线*******************************//\n");
//操作较大的数时,注意溢出的问题
//JDK7新特性,数字之间可以用下划线分割
int num5 = 1000000000; //不容易容易阅览
System.out.println(num5); //1000000000
int num6 = 10_0000_0000; //万进制容易阅览,符合习惯
System.out.println(num6); //1000000000(效果一样)
//*************************我是分割线*******************************//
System.out.println("\n//*************************我是分割线*******************************//\n");
int num7 = 10_0000_0000;
int num8 = 20;
int num9 = num7 * num8;
System.out.println(num9); //-1474836480(超过容量范围整数溢出)
long num10 = num7 * num8;
System.out.println(num10); //-1474836480(计算变量的两个都是int类型,结果为int再转long,但已经先超过容量范围整数溢出)
long num11 = (long)num7 * num8;
System.out.println(num11); //20000000000(其中一个转为long类型,表达式提升结果转为long类型)
//*************************我是分割线*******************************//
System.out.println("\n//*************************我是分割线*******************************//\n");
//小写字符l和数字1容易混淆,如果要写小写字符l请一律使用大写字符L代替
}
}