java编程学习日记

1.基本数据类型问题
1.1.基本数据类型种类

类型字节数取值范围
byte1[-128,127]
short2[-32768,32767]
int4[-2147483648,2147483648]
long8[-2^63 , 2^63-1]
float4[-3.403E38,3.403E38]
double8[-1.798E308,1.798E308]
char2[-32768,32767]

关注点1.在变量初始化过程中,赋值语句=两边的数据类型是没有任何联系的。
样例1: long longNumber = 1000;
这里赋值符号=右边的1000,默认的数据类型是int型,并不是左边的long数据类型,这里初始化过程,事实上是包含了数据类型自动转换过程,即由小容量向大容量转换,这里由int类型转换为long数据类型,所以没有问题。
样例2:long longNumber = 32768;
按照样例1的同样的方式分析,依然数据类型自动转换,由int类型转换为long类型,好像是没有问题,但是结果,可以看如下运行结果截图:
在这里插入图片描述
我们可以看到编译报错,不符合语法规则,这里是由于int类型的取值范围为[-32768,32767],所以这里的值32768已经超过了int类型的取值范围,不符合语法规则,所以导致这里报错。修正的方式有如下:
long longNumber = 32768L;
这里指明该字面值为long数据类型。

关注点2:
样例3: int intNumber = 50L;
运行结果如下:
在这里插入图片描述
我们可以看到,从理论上,当大容量赋值给小容量的时候,编译运行结果报错,类型不兼容,会出现精度损失。

样例4: byte byteNumber = 10;
运行结果如下:
在这里插入图片描述
运行结果竟然没有报错,按照理论来看,这里是大容量赋值给小容量,应该会报错,但是并没有,原因是由于sun公司对
byte、short、char 三种数据类型进行了特别处理,该三种数据类型,在取值范围内,允许大容量赋值给小容量。

关注点3:
样例5: int intNumber = 10;
byte byteNumber = i / 3;
这里如果套用如上面的分析思路,可能认为这里编译运行的结果应该为 byteNumber = 3;
实际运行结果如下截图:
在这里插入图片描述
结果是编译报错,这里是我们产生了思维惯性,理所当然的把计算结果算出来了,但是java程序包括编译期和运行期,这里是在编译期报错,因为intNumber本身为int类型,3为int类型,所以结果依然是int类型,按照如上的理论,将大容量赋值给小容量,会出现类型不兼容问题,所以还是会报错。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值