java的数组的特性

本文详细阐述了Java中的数组概念,包括数组的创建方式(动态和静态)、初始化方法、遍历访问技巧以及引用类型与基本类型的区别,强调了数组在内存分配上的特点。
摘要由CSDN通过智能技术生成

        在之前的文章中我们有提到过java中的数组是引用数据类型变量,那么它具体有哪些特点呢?接下来就由小编来带大家梳理一下吧

b1cd93c897d644eeb7c7376ece899706.jpg

目录

一、数组的基本概念

       1、数组的创建及初始化

1、动态初始化

2、静态初始化

2、数组的遍历访问

二、数组的引用类型特质

1、基本类型变量与引用类型变量的区别

总结


一、数组的基本概念

       1、数组的创建及初始化

创建数组的语法格式为:

数据类型[] 数组名 = new 数据类型[N];

举例如下:

int[] array1 = new int[5];       // 创建一个可以容纳5个int类型元素的数组

double[] array2 = new double[5];  // 创建一个可以容纳5个double类型元素的数组

String[] array3 = new double[5];  // 创建一个可以容纳5个字符串元素的数组

而数组的初始化主要分为动态初始化以及静态初始化两种:

1、动态初始化

即在创建数组是直接确定了元素的个数,例如:
 

int[] array=new int[10];//创建了一个长度为10的整型数组

2、静态初始化

即在创建数组时没有直接指定数据元素个数,而直接指定了具体的数据内容:

数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3......};

例如:

int[] array=new int[]{1,2,3,4,5};

注意:

1、静态初始化时可以省略“new 数据类型[]”,即直接“数据类型[] 数组名 = {数据1,数据2,数据3......};”

2、静态初始化虽然没有给出数组长度,但是编译器编译时会根据{}中元素个数来确定数组的长度

3、静态初始化时{}内数据类型必须与定义数组的数据类型保持一致

4、若数组没有初始化,数组中的元素会有默认值,如下

0bfba990a09f4424bb721f70916121dd.png

2、数组的遍历访问

所谓遍历,即依次访问数组中的每一个元素,我们最自然的想法便是用for循环来遍历:

int[]array = new int[]{10, 20, 30, 40, 50};
 for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
 }

但是我们得注意一点,如果我们并不知道需要遍历的数组的长度该怎么办?幸好在java中可以通过 数组对象.length来获取数组的长度,如下:

int[]array = new int[]{10, 20, 30, 40, 50};
 for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
 }

这样代码显然就变得更加灵活了,同时也可以用for循环的另一种形式for-each语句:

int[] array = {1, 2, 3};
 for (int x : array) {
    System.out.println(x);
 }

相比于for循环,能够更方便的完成对数组的遍历.,可以避免循环条件和更新语句写错

二、数组的引用类型特质

1、基本类型变量与引用类型变量的区别

我们先得介绍一下JVM的内存分布特点:

d533ef4b11004f5ab9826eab1600ab12.png

我们可以看到JVM内存主要被分为了五个部分,那么为什么要把一个大内存划分开来呢?主要就是为了更好的管理,每一个区都有各自的职责。而为了探讨基本类型变量与引用类型变量的区别,这篇文章我们就先主要介绍java虚拟机栈的作用

  • 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含 有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
  • 堆(Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销 毁

如果光看概念是不是一脸懵,其实用大白话讲就是:

  • 虚拟机存储的就是局部变量
  • 存储的是对象

例如如下代码:

public class Text {
    public static void main(String[] args) {
        int[] array=new int[10];
        int a=10;
        int b=20;
    }
}

其在栈堆上存储如下:

2d554f84dabf40b6a8d4c6494abd1e4c.jpeg

        可以看出像变量a、b这样的基本数据类型创建的变量,在空间中直接存放的是其所对应的;而像arr数组这样的引用数据类型创建的变量,其空间中存储的是对象所在空间的地址

以下程序可以更直观的反映这一特点:

public class Text {
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        System.out.println(array);
    }
}

73ea4aac338c4b9d8b30e588252e4f55.png

我们可以看到在直接输出数组array的值时输出了一串奇怪的字符,其具体解释如下:

33aab78878414c87b483ba396922f69f.jpeg

而这一串的最终目的就是指向一个对象,这反映了引用数据在存储时的最大特点,即在上存储了一块的地址,在对应的上存储相应的对象。

总结

本篇文章中简单介绍了Java数组的基础用法,及数组为代表的引用数据类型与基本数据类型的区别,至于数组的一些进阶应用,就留到下一篇文章来介绍吧

那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊

8a1fd10762e4493aa236915bd5397720.png

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值