2-17的两点问题
1、
Double d1=Double.valueOf(100);
System.out.println("d1==100的结果:"+(d1==100));
老师,打印的比较结果是true,我有疑问的地方是:Double包装类存储的数据是int类型的100,但是Double本身是浮点型包装类,所以存进去后应该是100.00,当(d1==100),自动拆箱后难道不应该是100.00吗,怎么会是100呢?
2、
Double d1=Double.valueOf(100);
老师,课程里说Double和Float包装类不具备什么常量池的。。。资格。。感觉说的不太准确。那么,如上段代码所示,Double.valueOf(100)此时的valueOf就不会去常量池查找存储-128到127之间数值的对象,那么valueOf()做了什么操作呢?
正在回答
同学你好,
1、所有包装类的自动装箱默认都会调用valueOf方法。
2、常量池会存放Long,Integer,Byte,Short类型在[-128,127]范围中的数值。
Character类型的数值存储在常量池的范围是 0 到 127。
Boolean类型在常量池中的范围为true,false。
Float,Double类型没有常量池的概念。所以,常量池中不会存放这两种类型的数值。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,
1、首先包装类Double的值不存放在常量池中。
Double d1=Double.valueOf(100);
该语句是重新创建一个Double类型的对象,相当于执行了new Double(100);操作。
当包装类与基本数据类型进行比较时(d1==100),先将包装类转换成基本数据类型,再做值比较,此时左右两边相当于是double,int类型。
当int类型与double类型进行比较时,会将int类型默认转换为double类型进行比较。
所以,d1==100返回true。
2、Double.valueOf(100)此时的valueOf方法是执行了new Double(100);的操作。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星