java数据类型转换

854 阅读3分钟

基础知识巩固:理解java数据类型转换规律

前言

数据类型为什么需要转换呢?

  1. 为了节省空间
    • int a = 20,可转换为byte类型 byte b = (byte)a; 因为byte范围为-128 到 127,存储该值已足够,可节省大量空间。
  2. 为了方便换算
    • 如前台接受数字内容的字符串,为了方便后台运算,可将字符串转换成对应的数字类型数据进行换算。

在java中数据类型转换分为自动类型转换强制类型转换,以下篇幅将进行详细介绍。


自动类型转换

自动类型转换是从小类型转换到大类型, 这里的大小指的是存储空间的大小,也可理解为精度大小(即精度低的转换到精度高的)

  1. 在Java中,boolean类型与所有其他7种类型都不能进行转换。
  2. 在其他7种基本类型中,byte和char ,char和short之间不能自动转换
    • byte-2^15 ~ 2^15-1有负数范围,而char0 ~ 2^16-1只有正数范围
    • char的正数最大范围大于short的正数最大范围

这直接导致byte类型不能自动类型提升到char,char和short也不会发生自动类型提升(因为值范围问题) 。所以,char 不能和byte short 相互自动转换

  1. 如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int
short s = 10;
int num = 20;
//必须是int或者比int精度更高的类型接受
int n = num + s;
byte b=3;     
//必须声明byte,因为b*3的结果为int类型
b=(byte)(b*3);
  1. char类型向更高类型(如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
char  c = 'A'; 
int num = 10; 
int a = c+num; 
  1. 编译器只看类型不看值大小
int a = 129;
//编译器只看类型不看值
byte b = (byte)a;
//结果为-127
System.out.println(b);

强制类型转换

强制类型转换语法:

数据类型 变量名 = (数据类型)值; 注:值可能是更高的类型

int b = 20;
byte a = (byte)b;

强制类型转换的注意事项:

  • 高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降
  • 强转使用场景:一般是开发中我们知道该值的范围,强制转换不会造成精度损失的情况下使用

强制转换示例:

示例1

short i=99;
char c=(char)i; 

示例2

int i1=123;
int i2=456; 
//小数类型默认double,表达式结果取最高精度double,所以double(高)转float(低)需要强转
float f1 = (float) ((i1+i2)*1.2);

示例3

byte b1=1;
byte b2=2;
//byte,short,char在计算时首先转换为int类型,b1+b2结果为int类型,需强转
byte b3=(byte)(b1+b2); 

结论

在Java中,boolean类型与所有其他7种类型都不能进行转换

自动类型转换

  • 低精度转高精度(小类型转大类型)可自动类型转换
  • byte和char ,char和short之间不能自动转换
  • byte、char、short类型运算时会先自动提升为int类型,表达式结果也为int类型
  • 表达式结果默认取精度最大的类型,接收类型必须大于等于该精度

强制类型转换

  • 使用场景:一般是开发中我们知道该值的范围,强制转换不会造成精度损失的情况下使用