> 文档中心 > 【java篇】java中数组到底是不是对象?

【java篇】java中数组到底是不是对象?

📗目录

  • 🌏问题引入
  • 🌏验证数组是不是对象及其原理
    • 🍊方法1
    • 🍊方法2
  • 🌏补充说明

在这里插入图片描述
文章目的:验证java语言中数组到底是不是对象。


🌏问题引入

int[] arr=new int[20];Person person=new Person("张三");

由于数组的使用方式和其他的一般对象不同,所以Java的数组到底是不是对象呢?


不同于C/C++的是,Java语言是一种支持完全面向对象的语言,万物皆对象的思想是Java面向对象的核心,Java的一切特性和设计都是围绕面向对象设计的。其中Java的八种基本数据类型并不是对象,这一点可以通过验证:

int a=100;a.toString();//错误

我们知道,Java中任何一个类都是Object类的子类,任何类的实例化对象都可以使用Object类中封装的方法,而这一特性对于基本数据类型并不适用。所以,Java语言中基本数据类型不是对象!


那么,Java语言中的数组到底是不是对象呢?

🟢答案:是


🌏验证数组是不是对象及其原理

🍊方法1

  • 调用Object类的方法。
public class A_1{    public static void main(String[] args){ int[] arr=new int[20]; System.out.println(arr instanceof Object);    }}//true

对象运行符instanceof用来判断指定对象是不是一个指定类或者它的子类的实例化对象。返回值是boolean数据类型。从程序运行结果可以看出,数组确实就是一个对象。

🍊方法2

  • 用对象引用修改对象的值,另一个指向同一对象的引用观察变化。
public class A_1{    public static void main(String[] args){ int[] a=new int[]{1,2,3}; System.out.println("a[0]="+a[0]); int[] b=a; b[0]=4; System.out.println("a[0]="+a[0]);    }}//a[0]=1//a[0]=4

我们知道对象本身是引用数据类型,对象创建在堆中,而对象变量存放在栈中,对象变量中存放的是对象的引用地址。那么如果两个变量同时指向一个数组,当一个变量修改了数组中的值时,另一个变量也能访问到数组中被修改的值。

所以说,Java语言中,数组确实是对象。

🌏补充说明

在这里插入图片描述

  • 数组对象由JVM直接创建,并不是通过某个类来实例化的。除了Object类外,数组并不是类体系树中任何类的实例化,这是数组和普通对象的区别。
  • 为了弥补基本数据类型不是对象的缺陷,同时实现Java语言万物皆对象,Java推出了包装类型,Java为每一个数据类型都创造了与之对应的类,从而可以将基本数据类型转换为对象,这些类称为包装类。基本数据类型和包装类相互转化的过程称为装箱和拆箱。Java语言自动进行,将基本数据类型赋值给包装类完成了自动装箱,反之完成自动拆箱。