java中数据类型转换分为两种
1.自动类型转换
自动类型转换 大范围小范围兼容
以下是测试int范围内的数字常量 赋值给long类型的结果
public class DemoDataType {
public static void main(String[] args) {
DemoDataType t =new DemoDataType();
System.out.println(1024);//默认是int类型
long num1=1024;//将默认的int类型复制给long类型变量num1 会隐式类型转换成long类型
System.out.println(num1);//1024
System.out.println("num1的对象是:"+t.judgeType(num1));//Long
}
//判断数字类型函数
public String judgeType(Object temp) {
if (temp instanceof Long) {
return "是Long类型";
} else if (temp instanceof Integer) {
return "是Integer类型";
} else if(temp instanceof Float){
return "是Float类型";
}else if(temp instanceof Double){
return "是Double类型类型";
}else{
return "其他数据类型";
}
}
}
从以上测试中能够看出因为long的范围比int的范围大所以会隐式转换成long类型输出结果为
隐式类型转换和字节大小不相关只和范围相关
下面测试 把8个字节的long类型赋值给4个字节的float
public class DemoDataType {
public static void main(String[] args) {
DemoDataType t =new DemoDataType();
System.out.println(1024);//默认是int类型
float num1=2100000000;//将默认的int类型复制给float类型变量num1 会隐式类型转换成float类型
System.out.println(num1);//1024
System.out.println("num1的对象是:"+t.judgeType(num1));//float
}
//判断数字类型函数
public String judgeType(Object temp) {
if (temp instanceof Long) {
return "是Long类型";
} else if (temp instanceof Integer) {
return "是Integer类型";
} else if(temp instanceof Float){
return "是Float类型";
}else if(temp instanceof Double){
return "是Double类型类型";
}else{
return "其他数据类型";
}
}
}
输出结果为Float类型,由此课件隐式类型转换看的是范围大小而不是字节大小~!
2.强制类型转换
强制类型转换的语法格式 在值 的前面使用括号包含需要转换的类型
超过范围的强制类型转换数据会溢出
public class DemoDataType {
public static void main(String[] args) {
//格式:在值的前面添加(类型)
int num = (int)100L;
System.out.println(num);
//long强制转换成int类型
int num2 = (int)6000000000L;
//数据溢出
System.out.println(num2);
}
}
结果:
小数转换成整形
public class DemoDataType {
public static void main(String[] args) {
int num = (int)3.8;
System.out.println(num);
}
}
由此可见将浮点数类型强制转换会出现精度损失,不是四舍五入
字符和数字运算的时候 字符会从ASCII表中取出相对应的数字
public class DemoDataType {
public static void main(String[] args) {
char str = 'A';
System.out.println(str + 1);//输出结果66,这时候str会被转换成ASCII表中对应的十进制数65代表键盘上的A字母
byte num2 = 40;
byte num3 = 60;
byte result1 = num2 + num3;
System.out.println(result1);//这里会提示 不兼容的类型: 从int转换到byte可能会有损失
}
}
编译结果
为什么会提示int类型转换到byte类型会有损失呢? 代码中命名没有出现过int类型 两个byte范围内的值相加也没有超过byte类型带着疑问进行下一步探索
public class DemoDataType {
public static void main(String[] args) {
char str = 'A';
System.out.println(str + 1);
byte num2 = 40;
byte num3 = 60;
//讲两个byte类型相加的结果给 int 类型的result1变量
int result1 = num2 + num3;
System.out.println(result1);
}
}
输出结果
由以上结果能够看出来 byte 在运算时会java会自动把它提升成int类型相加…虽然最后的结果是在byte类型范围类,实际已经是int类型,因此int类型赋值给byte类型肯定是不行的. 需要使用int类型的变量去接受;
那么我就要使用byte类型去接受两个byte类型运算的结果该怎么操作?
将提int类型运算的结果转换成byte即可…结果一定要在相对应的规定范围内,
public class DemoDataType {
public static void main(String[] args) {
char str = 'A';
System.out.println(str + 1);
byte num2 = 40;
byte num3 = 60;
byte result1 = (byte)(num2 + num3);//将提int类型
System.out.println(result1);
}
}
boolean 类型和其他的一些语言不一样 不会发生数字的转换 没有非零即真的概念