数组是否可以包含整数和浮点数

时间:2011-06-22 09:19:15

标签: java arrays types theory

有人问我:java中的数组是否包含整数和浮点数?她从老师那里得到了这个问题。

现在我的回答是:是的,因为你可以声明一个对象数组并在其中存储整数和浮点数。

但现在我想知道这是否正确,因为从技术上讲,当你将Integer和Float对象存储在一个数组中时,它确实包含两种类型,但是如果你要“询问”数组,他会告诉你他包含对象,如果我不进行簿记或类检查,则无法判断数组中是否存在整数和浮点数。

另一方面,我仍然觉得这可能是正确的答案,因为从理论上讲,数组包含两种类型的对象。

所以我要求一个聪明的意见:如果你被问到(在一次采访中,测试什么),java中的数组可以包含整数和浮点数,是或否?你会回答什么?

4 个答案:

答案 0 :(得分:15)

int的{​​{1}}不适合float数组。但是,通过自动装箱,java会将Object[]Float放入数组中。

IntegerFloat都延伸Integer。所以你甚至可以制作一组数字Number

此外,您可以将Number[]放入int,但java会将int转换为浮点数。反过来也是可能的,但精确度将会丧失。 (编辑:即使从int->浮点精度也可能丢失.float-> int可能会丢失有关值的整体大小的信息。)

结论将取决于问题。对于原始数据类型,数组不能包含其他数据类型。如果使用Object数组(Integer,Float,Number),答案是肯定的。

答案 1 :(得分:2)

这不是一个明确的“是”或“否”答案的问题。

我可以看到三种不同的方式可以回答肯定的问题:

  1. 数组可以是Number[]类型,可以包含(引用)FloatInteger个对象;
  2. 数组可以是double[]类型,可以包含float s和int强制转换为double(注意,两个演员都无损 );
  3. 该数组可以是int[]类型,并且可以使用Float.floatToRawIntBitsint存储为float并将int转换为{{1}}。
  4. 在案例3中(可以说在案例2中),您还需要一个并行数组,该数组将记录存储在主数组的每个元素中的值的类型。根据问题中的假设,这可能会使这些视为合适的答案。

    如果在面试环境中提出这个问题,我会概述面试官的可能性,并询问他们正在寻找的三种解释中的哪一种,如果有的话。如有必要,我会进一步详细说明。

答案 2 :(得分:1)

如果您想使用基本数组,可以使用double[]double可以存储所有可能的intfloat值。丢失的唯一信息是该数字最初是int还是float(有3300万个整数可以是其中之一)

intfloat存储在double []

double[] d = 
int i = 
float f = 
d[0] = i;
d[1] = f;

要检索intfloat值。

int i = (int) d[0];
float f = (float) d[1];

如果使用Object []存储任何对象组合,包括Integer和Float。

面试问题可以通过询问他们从未想过的问题来捕捉受访者,通常是因为没有充分理由这样做(可能永远)如果这个问题听起来很奇怪,也许应该是。 ;)

答案 3 :(得分:0)

在java中只有两种数据类型 - 对象(扩展类Object的所有内容)和基元(int,byte,char等)。此外,每个原语都有其对象兄弟 - 例如int和java.lang.Integer

从技术上讲,数组只能包含对象。

但是在java 5.0中,由于'autoboxing'功能,它可以跳过原始到对象的转换 - 基本上它正在取代每个调用
int myInt = 0; array[0] = myInt;

array[0] = new Integer(myInt);

此替换是自动完成的,但是在内部(在运行时)java机器将具有带对象的数组(整数),而不是基元(int),这可能会影响数组操作的性能。