3
  1. float ff = 1.2f;
  2. Float fo = new Float(1.2f);
  3. double fg = 3.2d;
  4. Double fh = new Double(2.1d);

我可以在 (1) 和 (3) 之间或 (2) 和 (4) 之间使用 '=' 吗?

4

8 回答 8

21

是的。

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

回答编辑问题:

你会看见

  1. 如果您尝试,“可能会丢失精度”消息ff = fg
  2. 如果您尝试“不兼容的类型” fo = fh
  3. fg = ff可以正常工作(浮动适合双倍)。
  4. fh = fo仍然会给你一个“不兼容的类型”。
于 2009-06-17T18:41:07.533 回答
7

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

于 2009-06-17T18:40:29.547 回答
7

是的,第一个是原始类型,第二个是包装原始浮点类型功能的装箱类,例如,我们需要第二个用于集合。在您不得不处理大量类型转换之前(我认为直到 Java 1.5),现在包装类的存在具有这些功能。更多信息。这里

于 2009-06-17T18:41:26.240 回答
3

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

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

于 2009-06-17T18:40:59.827 回答
2

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

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

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

另请注意,原语和对象使用等于运算符==的工作方式不同。

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
于 2009-06-17T18:58:01.297 回答
1

是的,原始类型不能为 NULL,对象可以。Float 对象还附加了一堆有用的实用功能。

于 2009-06-17T18:41:49.687 回答
1
  1. 有了这个声明,您就有了一个原始类型 float 并为其分配了一个值。原始类型是不由其他数据类型组成的数据类型,不能进一步拆分(简单解释一下)。原始类型通常是内置类型。

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

原始类型浮点数和对象类型之间的主要区别在于原始数据只是一种数据格式,没有属性或方法。

3=1 可以正常工作,休息不行。

于 2012-12-11T17:20:43.050 回答
0

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

于 2009-06-17T20:22:41.057 回答