Java学习日记day1

1.main函数参数列表

public static void main(String[] args) 中的(String[] args)是参数列表,args只是参数名,可以随便改写。

2.数据类型

区分数据类型的目的是区分占用内存位数的多少,通过占用内存大小分为不同的类型。

2.1 short类型和char类型的转换

内存占用情况:short占用2个字节,char占用两个字节。

问题:short的范围是-32768~32767,char的范围是0~65535,short类型的值转换成二进制是有一位符号位的,所以当short和char进行转换的时候,char类型会将short的符号位当成数值位来计算,造成偏差。但是当使用int与char进行转换时,由于int大小为4字节,即从低到高第16位仍旧是数值位,所以不会出现上述问题。

结论:在自动类型转换中需要比较char时,应当舍弃short和byte,直接从int开始,即char --> int --> long --> float --> double

2.2 float类型与int类型转换时出现的精度丢失问题

内存占用情况:在内存中,float占用4个字节(32位)。

其中,最高的1位是符号位,接下来的8位组成指数部分,最后的23位是尾数部分。这就限制了float类型数值可以表示的指数范围和长度范围。

因此,在下面的代码中,当int类型的数值在向float类型转换时,由于float尾数只有23位,所以无法完整表示123456789,将最后两位赋予了近似值。

int i = 123456789;
float f = i;
System.out.println(f);

i = (int)f;
System.out.println(i);
//输出结果:
//1.23456792E8
//123456792

即使将float类型的数值再次转换为int类型,原来的数据也已经丢失。

结论:可以使用double类型取得更好的转换效果。

tips:即使采用了double,也会存在精度丢失的风险,因为计算机在表示一个数字时,宽度是有限的,而由浮点数转换而来的二进制数很容易不是有限的,那么计算机就只能将其截断,然后导致小数精度发生损失。

3.移位运算符

<< 左移运算:二进制数右边补0,删除左边非符号的第一位,相当于该数乘2。

>> 右移运算:二进制数删除最后一位,在左边非符号的第一位补0或1(正数补0,负数补1),相当于该数除以2。

>>> 右移运算(不考虑符号位):二进制数删除最后一位,在左边第一位补0,存在改变符号位导致负数变正数的可能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值