java中数组到底是不是对象

举报
陈橘又青 发表于 2022/06/30 19:58:25 2022/06/30
【摘要】 文章目的:验证java语言中数组到底是不是对象。🌏问题引入int[] arr=new int[20];Person person=new Person("张三");由于数组的使用方式和其他的一般对象不同,所以Java的数组到底是不是对象呢?不同于C/C++的是,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语言中的数组到底是不是对象呢?

🟢答案:是
🌏验证数组是不是对象及其原理
🍊方法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语言自动进行,将基本数据类型赋值给包装类完成了自动装箱,反之完成自动拆箱。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。