目录

一维数组详解

1.数组的三种创建方式:

2.数组的使用

(1).获取数组的长度:

(2).遍历数组:

(3).关于数组的库里面的方法:

3.数组是引用类型(重点)


一维数组详解

1.数组的三种创建方式:

public class Main{
    public static void main(String[] args){
        
        int[] arr1 = {1,2,3,4,5};//方法一
        int[] arr2 = new int[5];//方法二
        int[] arr3 = new int[]{1,2,3,4,5};//方法三
    }
}

注意:不能这么写:int[] arr = new int[5] = {1,2,3,4,5};

使用方法二,要特别注意不同类型的默认值,如下图:

类型

默认值

byte

0

short

0

int

0

long

0

float

0.0f

double

0.0

char

\u0000

boolean

false

要注意的是,如果数组里面存的是引用类型(相当于二维数组),默认值为null,二维数组的内容我将会在下一篇文章讨论

2.数组的使用

数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素
数组的下标是从0开始的,注意不要越界访问

(1).获取数组的长度:

方法1:利用array.length,至于这个是什么,学到后面的类和对象就自然知道了,这里只要知道怎么用就可以了

public class Main{
    public static void main(String[] args){
         int[] arr = {1,2,3,4,5};
          System.out.print(arr.length);
    }
}

方法2:循环遍历(这里用的是foreach循环,请参考下文)

public class Main{
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        //计数器
        int count = 0;
        //foreach语句:用来遍历数组,下文会讲到
        for (int x: arr){
            count++;
        }
        System.out.print(count);
    }
}

(2).遍历数组:

方法1:for循环

public class Main{
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for (int i = 0;i < arr.length;i++){
            System.out.print(arr[i]);
        }
    }
}

方法2:foreach循环

public class Main{
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for(int x :arr){
            System.out.print(x);
        }
    }
}

注意:foreach循环的意思是,创建一个变量x,按顺序去接受数组arr中的值

(3).关于数组的库里面的方法:

//这里只是简单的介绍用法,因为内容太多,这些内容的详解我会另写一篇文章。

a.将数组转换为字符串输出:Arrays.toString(数组名字)

java 一维数组的建立与使用 java一维数组的定义方式_java

 b.数组拷贝:Array.copyOf(arr,length) :arr是要拷贝的数组,length是要拷贝的数组的长度

java 一维数组的建立与使用 java一维数组的定义方式_java_02

 

c.查找数组中的某个元素:Arrays.binarySearch(数组名,key)

key值是你要查找的值,这个方法的返回值是key的下标

java 一维数组的建立与使用 java一维数组的定义方式_引用类型_03

 (4).如何实现数组扩容:使用方法copyOf()

java 一维数组的建立与使用 java一维数组的定义方式_数组_04

 

3.数组是引用类型(重点)

引用类型通俗的理解就是变量存储的是对象所在的地址

例如数组,它的数组名存储的是数组的地址

要更深入的理解引用类型,则必须清楚JVM的内存划分,如图:

java 一维数组的建立与使用 java一维数组的定义方式_数组_05

这里重点要用到栈和堆

接下来就重点解释一下数组在内存中到底是怎么样存储的

java 一维数组的建立与使用 java一维数组的定义方式_引用类型_06

如上图所示,计算机在栈中开辟了一块内存存储main的栈帧,main的栈帧里面存储了array引用变量,计算机又在堆中开辟了一块连续的空间存储数组array的数据,array变量存储的是堆中数据的地址,堆中的数据就叫做array指向的对象,这就是数组在内存中的存储方式

下面,我们看一段代码,加深一下对数组的理解:

此时的输出的结果是什么呢,是1 2 3 4 5吗,看下图

public class Main {
    public static void main(String[] args) {
        int[] array1 = {1,2,3,4,5};
        int[] array2 = {6,7,8,9,10};
        array2 = array1;
        array2[0] = 0;

        for (int x:array1){
            System.out.print(x + " ");
        }
    }
}

java 一维数组的建立与使用 java一维数组的定义方式_java 一维数组的建立与使用_07

奇怪,结果是0 2 3 4 5,为什么呢?

因为array2 = array1;这条语句是把array赋值给array2,所以就会造成变量array1和array2指向了同一哥对象,所以改变array[0],和改变array[0]是一样的,看下图-->

java 一维数组的建立与使用 java一维数组的定义方式_System_08

大家可能还有一个疑问,我把array2的值改成了array1,那我原来指向的数组{6,7,8,9,10}去哪了

,其实,在java当中,数组在堆中开辟的内存,一旦没有引用变量去指向它,会立马自动释放,

而在c语言当中,还要程序员自己去手动释放,所以java真的是一门非常安全的语言。

注意:那如果我要让一个引用类型的变量什么都不指向,怎么做呢,array = null;就可以了