关于java数组初始化细节

java基础 专栏收录该内容
57 篇文章 0 订阅

java数组在编程中非常常见,一般我们使用数组有如下几种方式:

  1. Object [] obj = new Object[10];
  2. Object [] obj = {};
  3. Object [] obj = new Object[]{};

大部分声明数组就是这三种方式,还有一些特殊的创建方式,比如反射,反序列化都是可以产生数组对象的。

数组一旦初始化长度之后,是无法更改长度的,也就是说,数组是不可改变长度的。
第1种方式是声明加初始化数组并且定义数组长度
第2种方式是声明加初始化,等同于第三种方式,也就是第三种方式的缩写版,并且,数组的长度为0
第3种方式是声明加初始化,等同于第二种方式,并且数组的长度为0

内存中的分配

第1种:
在一个方法中定义一个数组,也就是局部变量,包含两块空间,一个是变量名字,存放到栈内存中,还有一个是数组实例,也就是new Object[10],或者{},或者new Object[]{}
数组实例是存放在堆内存中。栈内存中的变量名字只是存放了指向堆内存中数组实例的地址。

第2种:
在一个类中定义一个数组,也就是成员变量(也叫全局变量),这种数组定义的时候并不会在内存中创建出来(加了static的成员变量除外),只有当产生了该类的实例,那么成员变量才会在堆内存中创建出来,也就是说类中的数组变量名是存放在该对象的堆空间中的,存放的也是地址,指向数组实例的堆空间地址。

java中的jvm虚拟机内存分配原理是很有用的,可以极大的加深对java语言的理解程度。

总结:数组类在java中是没有源码的,这是java从C语言里传承过来的,java是使用C语言开发出来的。所以数组在java中的表现形式是以一种引用类型来定义。在java中,所有的引用类型实例的创建都是在堆内存中创建。而且数据实例一旦创建就会有值,基本类型数组的默认值是各种基本类型的默认值,引用类型数组的默认值是null。
数组创建如果只写了声明变量,省略了new这种写法,例如第2种方式的写法,那么编译器编译成class文件的时候会自动加上new 声明的类型 。
总之,省略了new关键字的写法,就是声明了什么类型的数组就会创建什么类型的实例数组。

对比java代码与class代码

java代码:

        String [] str = {};
        String [] str1 = {"qqq","www","rrr","ee","f"};
        String [] str2 = new String [] {"aa","fds","fds"};
        String [] str3 = new String[]{};

class代码:

        String[] str = new String[0];
        String[] str1 = new String[]{"qqq", "www", "rrr", "ee", "f"};
        String[] str2 = new String[]{"aa", "fds", "fds"};
        String[] str3 = new String[0];
  • 1
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

六月·飞雪

你的鼓励是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值