📜  数组是Java中的原始类型还是对象?(1)

📅  最后修改于: 2023-12-03 15:26:12.105000             🧑  作者: Mango

数组是Java中的原始类型还是对象?

在 Java 中,数组既是原始类型又是对象。这是因为 Java 把数组作为一个特殊的类来处理。在 Java 中,每个数组都有一个类名,这个类名是由数组元素类型和方括号数目来构成的。

例如,int[] nums 的类名是 [I]String[][] strs 的类名是 [[Ljava.lang.String;]。这两个数组都属于对象,并且是通过 new 关键字创建的。但是,Java 也提供了一种对于原始类型的数组的特殊处理,允许我们定义和使用一些原始类型的数组。

原始类型数组

在 Java 中,原始类型数组是一个连续分配的、包含相同类型元素的内存块。Java 支持以下原始类型的数组:

  • boolean[]
  • byte[]
  • char[]
  • short[]
  • int[]
  • long[]
  • float[]
  • double[]

例如,下面创建了一个整型数组:

int[] nums = new int[10];

这段代码在内存中分配了 40 个字节(每个 int 类型占用 4 个字节),并把这些字节置为 0。我们可以使用下标来访问和修改数组元素:

nums[0] = 123;
nums[1] = 456;
System.out.println(nums[0]); // 输出 123
System.out.println(nums[1]); // 输出 456

需要注意的是,原始类型数组只能包含原始类型的值,不能包含对象。例如,下面的代码在编译时会出错:

// 错误示例:int 数组不能包含 Integer 对象
Integer[] nums = new Integer[10];
nums[0] = new Integer(123);
对象数组

与原始类型数组不同,对象数组中的元素是对象引用。例如,下面创建了一个字符串数组:

String[] strs = new String[3];
strs[0] = "hello";
strs[1] = "world";
strs[2] = "java";
System.out.println(strs[1]); // 输出 world

需要注意的是,数组变量本身是一个对象引用。也就是说,我们可以使用数组变量来访问数组对象的属性和方法:

System.out.println(strs.length); // 输出 3
总结

综上所述,Java 中的数组既可以是原始类型,也可以是对象。原始类型数组只能包含原始类型的值,而对象数组中的元素是对象引用。无论是哪种类型的数组,都可以使用下标来访问和修改元素。这些特性使得数组成为 Java 中非常强大和有用的数据结构之一。