初学java,float类型问题,请教各位大虾 1. which three are valid declaraction of a float? A. float foo=-1; B. float foo=1.0; C. float foo=42e1; D. float foo=2.02f; E. float foo=3.03d; F. float foo=0x0123;
2. float f=4.2F; Float g=new Float(4.2F); Double d=new Double(4.2); Which are true? A. f==g B. g==g C. d==f D. d.equals(f) E d.equals(g) F. g.equals(4.2);
每一个选项是对是错?原因是什么? 在编译器里当然可以得出结果,但是不知道原因,麻烦各位了!
------解决方案-------------------- 1. which three are valid declaraction of a float? A. float foo=-1; // 必须在数字后加f或F,如1.23f B. float foo=1.0;//小数默认为double ,必须在数字后加f或F,如1.23f C. float foo=42e1;//必须在数字后加f或F,如1.23f D. float foo=2.02f; √ E. float foo=3.03d; //d 应该是double类型的 F. float foo=0x0123;
2. float f=4.2F; Float g=new Float(4.2F); Double d=new Double(4.2); Which are true? A. f==g // X , f 为基本数据类型float的变量 ,g为 float包装类Float的一个对象引用 B. g==g // 对 C. d==f //X ,两个对象的引用 D. d.equals(f) //X ? E d.equals(g) //X ? F. g.equals(4.2);//X ?
? public boolean equals(Object obj) 其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.
------解决方案-------------------- 你去我博客看看我的文章,我对浮点数做了比较深入的分析。单精度和双精度是不同格式来表达的,在内存里面也是不同的数字,;例如0.9,单精度和双精度在内存里就表示的是两个不同的数了(因为精度不同)。至于==这个运算符,如果你理解内存的话还好理解。==比较的是内存地址其实这个说法不一定正确的,java为了跨平台,内存地址不是真的内存地址,而是有一种哈希码来构成的对象地址的。比如 int i =1; Integer it= new Integer(1);如果从内存地址解释 i==it的话,应该是不是true的,但是事实却是true。这是因为==比较的是跟哈希码的东西。it的哈希码也是1,具体的==运算不好说。
------解决方案--------------------