java基本数据类型与自动转换

1、java的8种基本数据类型:

数据类型位数默认值范围举例说明
byte(位)80-2^7 ~ 2^7-1byte b = 10
short(短整数)160-2^15 ~ 2^15-1short s = 10
int(整数)320-2^31 ~ 2^31-1int i = 10
long(长整数)640-2^63 ~ 2^63-1long l = 10l
float(单精度)320.0-2^31 ~ 2^31-1float f = 10.0f
double(双精度)640.0-2^63 ~ 2^63-1double d = 10.0d
char(字符)16null0 ~ 2^16-1char c = ‘c’
boolean(布尔值)8falsetrue、falseboolean b = true

在Java中,数据类型的范围与运行Java代码的机器无关。这是因为Java程序必须保证在所有机器上都能够得到相同的运行结果,所以每一种数据类型的取值范围必须固定。这就解决了软件从一个平台移植到另个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。

2、基本类型的自动转换

数值类型之间的合法转换

在图中有6个黑色箭头,表示无信息丢失的转换;有3个红色箭头,表示可能有精度损失的转换。例如,123456789是一个大整数,它所包含的位数比float类型所能够表达的位数多当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度

int n = 123456789float f = n;// f 的值为 1.23456792E8

当使用两个不同类型数值进行二元操作时(例如n+f,n是整数,f是浮点数),会自动将两个操作数转换为同一种类型,然后再进行计算:

  • 如果两个操作数中有一个是 double类型的,另一个操作数就会转换为 double类型。
  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
  • 否则,两个操作数都将被转换为int型
  • 当两个byte类型相加并结果超出其表示范围
byte b1 = Byte.MAX_VALUE;
byte b2 = 1;
System.out.println(b1 + b2); //byte的范围为:-128~127,输出结果为128,可见其数据类型已自动转换
  • 当两个short类型相加并结果超出其表示范围
short s1 = Short.MAX_VALUE;
short s2 = 1;
System.out.println(s1 + s2); //short的范围为:-32768~32767,输出结果为32768
  • 当两个int类型相加并结果超出其表示范围
int n1 = Integer.MAX_VALUE;
int n2 = 1;
System.out.println(n1 + n2); //int的范围为:-2147483648~2147483647

总结:byte,short自身来计算的时候有类型的提升,二元操作时自动转为int类型;int,long,float,double自身来计算的时候没有类型的提升,如果超出范围了就会出现精度的损失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值