读Java 解惑有感

本文解析了几个有趣的Java谜题,包括字符串拼接的行为、注释的重要性、数值计算时的溢出问题、无穷大数值的表现形式及浮点数的精度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:谜题13:

String s="12";

String s1="1"+2;

String s2="1"+s.length();

System.out.println(s==s1);

System.out.println(s==s2);

 

第一个输出true;java 虚拟机中有字符串参量池,对于相同字符串会引用常量池相同地址的字符串。s1虽然有拼接,但2位数字常量,虚拟机会优化这个拼接动作,结果还是字符串“12”;

第二个输出false: 因为s.length()返回当变量处理,虚拟机不会优化,所以字符串拼接后对象地址肯定不同

2:谜题19:

令人费解的注释和无关的代码会引起混乱,要么更新到最新要么去掉

3:谜题26数值计算 要考虑其值是否会溢出

4:谜题28 用一个double和float 数值表示无穷大数值是可能的,但一个double值很大你加一个很小的整形值是不会改变他的值的,应该无穷大加1还是无穷大

5:谜题2.  精度
  float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
  float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
  double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值