Java中的数据类型转换

Java中的数据类型转换

数据类型转换分为两种:

  • 自动类型转换,也称为隐型转换
  • 强制类型转换

自动类型转换

当将某数据类型的值赋值给某个能够表示更大范围的数据类型的变量时,会发生自动类型转换,比如

byte b = 20;
int a = b;

上面的bbyte类型,aint类型,int类型的范围更加的大,所以将b赋值给a时会自动类型转换,将20转化为int类型赋值给a,但是b还是byte类型。但是不能将大范围的数据类型的值赋值给更小范围数据类型的变量,如

int a = 20;
byte b = a; //不行,编译器会报错

范围从小到大的顺序为

箭头代表可以转换。

在前面我们提及到,当将一个整数赋值给long类型的变量时,如果表示的范围没有超过int,那么可以不写后面的L,这时因为发生了自动类型转换

long l = 12; //后面没有加L,Java默认整数类型为int,这里发生了自动类型转换

强制类型转换

上面提及到大范围不能转向小范围,但是我们可以强行转换,比如我想将int类型的数值转化为byte类型的数值

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

在要转换的数据前面加上(byte)就可以强行转化为byte类型。

虽然可以将大范围转化为小范围,但是我们在平常时不会这么干,因为往往将大范围的数转化为小范围的数时,会有精度损失,比如:

double d = 3.5;
int i = (int) d; //结果为3,小数点后面的数直接舍去,并不是四舍五入

我们知道Java的整数默认为int,那么下面的语句为什么没有报错

byte b = 20; //20是int类型,int不能转byte,为什么没有报错
short s = 30; //同上

这是因为,在编译时,编译器会检查右边数值的范围,如果没有超过byte或者short能够表示的大小,那么编译器会自动帮我们强制类型转换为byteshort,相当于

byte b = (byte) 20;
short s = (short) 30;

几点注意

  1. char,short,byte类型在进行计算时,会自动提升为int类型参与计算
byte num1 = 10;
byte num2 = 20;
//下面这行语句会报错
byte num3 = num1 + num2; //在计算时,num1和num2会自动的提升为int类型,而int类型不能转为byte,所以会报错

但是,下面的写法是正确的

byte b = 1 + 2;

当右边全是常量时,编译器在编译时会直接计算,相当于下面

byte b = 3;

由于3没有超出byte能够表示的范围,所以会被强制转换为byte

char c = 'A';
//下面这行语句会输出一个数字
System.out.println(c + 0); //65

我们知道char是一个字符,那么为什么字符可以进行计算呢?这是因为计算机在底层是使用数字表示字符的,比如上面'A'就是使用数字65表示的,上面的字符与数字0进行计算,会自动提升为int类型,所以最后输出的就是数字。

我们需要知道几个特殊字符对应的数字

字符ASCII码
'0'48
'A'65
'a'97

大写字母与小写字母之间差32

  1. boolean类型不能进行数据类型转换

例如,下面将对boolean类型进行转换,是错误的写法:

int i = 1;
boolean b1 = i; //错误
boolean b2 = (boolean) i; //错误
boolean b = true;
int i1 = b; //错误
int i2 = (int) b; //错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值