Java数据类型与转换

数据类型

基本数据类型

整数默认int;小数默认double

整数:

  • byte       1字节  [-128 ~ 127]
  • short      2字节  [-2^15 ~ 2^15 -1]
  • int          4         [-2^31 ~ 2^31 -1]
  • long       8         [-2^53 ~ 2^53-1]

浮点

  • float       4        [-3.403E38 ~ 3.403E38]
  • double   8        [-1.798E308 ~ 1.798E308]

字符

  • char

布尔

  • boolean

引用数据类型

  • 类(class)
  • 接口(interface)
  • 数组([ ])

赋值不能超出类型的合法值表示范围;

不同类型变量之间的运算和赋值,编译器禁止将大类型的值直接赋给小类型;

对于JVM来说,它要求参与运算的数量之间,必须是同一种类型。int + byte时,JVM会将byte变量读取出来,变成一个int类型的量。

类型之间默认转换规则:

boolean类型的值不能转换为其他类型;

byte/short/char  -> int ->long -> float -> double;

byte、short、char相互之间不能转换。运算首先转换为int

强制转换

byte a = (byte)(intValue + byteValue);可以

byte c = (byte)129 输出:-127

原因:129 = 0,10000001(补码) ;9位 。c会被截断,只能装8位,也就是低8位(10000001)。最高位是符号位(1,0000001)取反+1(1,1111111)= -127

正数的补码就是其原码!

面试题

1。

byte b1 = 1, b2 = 2, b;
b = b1 + b2;--------------①
b = 1 + 2;----------------②

①会报错:byte类型的值参与运算,会首先转换成int。(byte、short、char相互之间不能转换。运算首先转换为int)

②不会:编译器简单判断了一下,如果换成202,就会报错。

2。

语句byte b = 300,能编译通过吗,如果不能,如何转换以及转换之后的值是多少?

不能,因为300超出了byte的合法值表示范围。可以通过强制转换让他通过。

转换之后的值为44.

原因:300 = 100101100(二进制,最高位1被截断,取低8位,即0,0101100,因为是正数,所以不需要取反+1,

转换成十进制就是44。.

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值