读Java 解惑有感

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位。

猜你喜欢

转载自xuyunti.iteye.com/blog/2224013