这两个陈述之间有什么区别吗?

时间:2009-06-17 18:39:28

标签: java types floating-point primitive

  1. float ff = 1.2f;
  2. Float fo = new Float(1.2f);
  3. double fg = 3.2d;
  4. Double fh = new Double(2.1d);
  5. 我可以在(1)和(3)之间或(2)和(4)之间使用'='吗?

8 个答案:

答案 0 :(得分:21)

  1. 创建一个名为“float。”的普通旧数据类型(AKA是一种原始类型)。
  2. 创建一个名为Float的Java对象,该对象包含恰好与(1)
  3. 相同的值

    回应编辑问题:

    你会看到

      如果您尝试ff = fg
    1. “可能会失去精确度”消息。
    2. “不兼容的类型”,如果您尝试fo = fh
    3. fg = ff可以正常工作(浮点数适合双倍)。
    4. fh = fo仍然会为您提供“不兼容的类型”。

答案 1 :(得分:7)

是的,2会创建一个对象。

答案 2 :(得分:7)

是的,第一个是原始类型,第二个是包装原始浮点类型功能的装箱类,我们需要第二个例如用于集合。在你不得不经常进行类型转换(我认为直到Java 1.5)之前,包装类的存在需要这些功能。更多信息。 here

答案 3 :(得分:3)

是。第一个声明基本类型float的变量并将其初始化为1.2。

虽然第二个声明了引用类型Float的变量,但创建了一个Float类型的对象,然后为该变量分配一个引用。

答案 4 :(得分:2)

new Float(1.2f)每次都会创建一个 new Float对象,消耗内存。

如果使用工厂方法Float.valueOf(1.2f),JVM可以将现有的Float对象实例重用为相同的值。只有在没有具有相同值的Float实例时,它才能创建新的对象实例。

通常你会想要使用Float.valueOf(1.2f)而不是新的Float(1.2f)。

另请注意,基元和对象与equals运算符 == 的工作方式不同。

float x1 = 1.2f;
float x2 = 1.2f;

x1 == x2  // true

Float f1 = new Float(1.2f);
Float f2 = new Float(1.2f);

f1 == f2 // false

答案 5 :(得分:1)

原始类型不能为NULL,对象可以。此外,Float对象还附带了许多有用的实用函数。

答案 6 :(得分:1)

  1. 使用此声明,您有一个基本类型float并为其赋值。基元类型是一种数据类型,它不是由其他数据类型组成的,它不能被拆分(简单地解释)。原语通常是内置类型。

  2. 在这种情况下,您创建了一个对象,在内部它由较小的数据类型组成,并且还包含方法。

  3. 基本类型浮点数和对象类型之间的主要区别是基元只是数据的格式,没有属性或方法。

    3 = 1将正常工作,休息不会。

答案 7 :(得分:0)

在实际应用程序中,我建议你不要使用float或Float,它不是很准确,几乎不是正确的解决方案,而是使用double或Double。