Java复习总结(三) Java数组

本文详细解析了Java数组的基础知识,包括定义、创建与初始化,以及如何操作数组。探讨了数组在JVM内存中的分布,重点讲解了数组在堆和栈上的分配,并展示了数组在数据存储、函数参数传递和返回值中的应用场景。通过实例演示了数组转换为字符串、复制和操作的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、数组基础知识

1.定义:数组是存放相同类型元素的集合。

2.数组的创建及初始化

3.数组的操作

二、数组占用的内存

1.JVM中的内存分布

2.数组在堆和栈上的分配情况

三、数组的应用

1.保存数据

2.作为函数的参数

3.数组作为函数的返回值

四、数组练习


一、数组基础知识

1.定义:数组是存放相同类型元素的集合。

2.数组的创建及初始化

以整型数组为例:

1.int[ ] array1 = {1,2,3,4};

2.int[ ] array2 = new int[ ]{1,2,3,4};

3.int[ ] array3 = new int[10];//没有初始化,默认被初始化为0.

3.数组的操作

(1)遍历数组

方法一:for循环

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

方法二:for-each 增强for循环(还可以用到打印集合当中的元素)

public class TestDemo {
    public static void main(String[] args) {
        int[] array={1,2,3};
        for(int x:array){
            System.out.print(x+" ");
        }
    }
}

方法三:借助Java本身提供的一些方法来进行数组的打印

介绍一个类:Arrays,     主要作用:操作数组

Arrays.toString(array); //把参数的数组转换为字符串进行输出

import java.util.Arrays;
public class TestDemo {
    public static void main(String[] args) {
        int[] array = {1,2,3};
        String ret = Arrays.toString(array);
        System.out.println(ret);
        }
}

运行结果:方括号代表方法内部帮你进行了这样的组装 

 

二、数组占用的内存

1.JVM中的内存分布

(1)Java虚拟机栈:存放局部变量....

(2)Java本地方法栈:运行一些由c/c++代码编写的程序[JVM其实是一个软件,是一个由c/c++代码编写的软件]

(3)堆:只要是对象,都在堆上分配内存 (数组就是一个数组对象),使用new创建的对象都在堆上保存

(4)程序计数器:存放一些指令的地址

(5)方法区:存放静态成员变量....方法编译出的字节码就是保存在这个区域

对JVM内存划分,更加简洁,方便管理

2.数组在堆和栈上的分配情况

array是在栈上,{1,2,3}在堆上

array中存储的是地址

 注:

(1)对引用和对象的理解

引用是一个变量,里面存的是地址。

int[]array1={1,2,3};

array1这个引用指向{1,2,3}这个对象。

(2)引用能指向引用吗?

不能。

array1 = array2代表array1这个引用 引用了array2所引用的对象

引用只能指向对象,引用指向引用这句话就不对

(3)一个引用能同时指向多个对象吗

不能同时。

(4)引用一定在栈上吗?

不一定。现在之所以把它画在栈上,我们目前只是接触到了局部变量,还没有接触到成员变量。

(5)引用赋值null代表什么?

int[ ] array = null 代表这个引用 不指向任何对象

三、数组的应用

1.保存数据

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

2.作为函数的参数

import java.util.Arrays;
public class TestDemo {
    public static void func(int[] array){
        array = new int[]{11,12,13,14};
    }
    public static void func1(int[] array){
        array[0]= 100;
    }
    public static void main(String[] args) {
        int[] array1= {1,2,3,4};
        func(array1);
        System.out.println(Arrays.toString(array1));
        int[] array2 = {10,20,30};
        func1(array2);
        System.out.println(Arrays.toString(array2));
    }
}

输出结果: 

 

 所以传引用不一定改变对象的值

3.数组作为函数的返回值

import java.util.Arrays;
public class TestDemo {
    public static int[] func(){
        int[] array = {1,2,3};
        return array;
    }
    public static void main(String[] args) {
        int[] ret = func();
        System.out.println(Arrays.toString(ret));
    }
}

四、数组练习

1.数组转字符串

public class TestDemo {
    public static String myToString(int[] array){
        String str = "[";
        for (int i = 0; i < array.length; i++) {
            str = str + array[i];
            if(i != array.length-1){
                str += ",";
            }
        }
        str += "]";
        return str;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3};
        String ret = myToString(array);
        System.out.println(ret);
    }
}

2.数组的拷贝

方法一:使用for循环进行拷贝

public class TestDemo {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        int[] copy = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            copy[i] = array[i];
        }
        System.out.println(Arrays.toString(copy));
    }
}

方法二:通过Arrays.copof来拷贝

import java.util.Arrays;
public class TestDemo {
    public static void main(String[] args) {
        int[] array = {1,2,3};
        int[] copy = Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(copy));
    }
}

方法三:使用System.arraycopy

public class TestDemo {
    public static void main(String[] args) {
        int[] array = {1,2,3};
        int[] copy = new int[array.length];
        System.arraycopy(array,0,copy,0,array.length);
    }
}

方法四:通过 数组名.clone()

import java.util.Arrays;
public class TestDemo {
    public static void main(String[] args) {
        int[] array = {1,2,3};
        int[] copy = array.clone();
        System.out.println(Arrays.toString(copy));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值