Java编程|【java篇】java中数组到底是不是对象()


目录

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

Java编程|【java篇】java中数组到底是不是对象()
文章图片

文章目的:验证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编程|【java篇】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语言中,数组确实是对象。
补充说明 Java编程|【java篇】java中数组到底是不是对象()
文章图片

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

    推荐阅读