【Java探索之旅】基本类型与引用类型 数组的应用 二维数组

简介: 【Java探索之旅】基本类型与引用类型 数组的应用 二维数组

📑前言

在编程中,了解基本数据类型和引用数据类型的区别是非常重要的,这有助于我们更好地理解变量的存储方式和数据操作过程。数组作为一种常见的数据结构,在Java中扮演着重要的角色,掌握数组的基本用法和应用场景有助于我们更高效地处理数据和进行程序设计。此外,二维数组作为数组的延伸,也具有自己的特点和用法,深入理解二维数组可以拓展我们对数组的认识和应用能力。  

一、基本类型与引用类型

1.1 区别

基本数据类型创建的变量:称为基本变量,该变量空间中直接存放的是其所对应的值;

引用数据类型创建的变量:一般称为对象的引用,其空间中存储的是对象所在空间的地址。

public static void main() {
    int a = 10;
    int b = 20;
    int[] arr = new int[]{1,2,3};
}

在上述代码中,a、b、arr,都是函数内部的变量,因此其空间都在main方法对应的栈帧中分配。a、b是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。

array是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址。

引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量便可以去操作对象。有点类似C语言中的指针,但是Java中引用要比指针的操作更简单。

1.2 引用变量

public static void func() {
    int[] array1 = new int[3];
    array1[0] = 10;
    array1[1] = 20;
    array1[2] = 30;
    int[] array2 = new int[]{1,2,3,4,5};
    array2[0] = 100;
    array2[1] = 200;
    array1 = array2;
    array1[2] = 300;
    array1[3] = 400;
    array2[4] = 500;
    for (int i = 0; i < array2.length; i++) {
        System.out.println(array2[i]);
    }
}

1.3 认识null

null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用

int[] arr = null;
System.out.println(arr[0]);
// 执行结果
Exception in thread "main" java.lang.NullPointerException
     at Test.main(Test.java:6)

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出 NullPointerException.

二、数组的应用场景

2.1 保存数据

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

2.2 作为方法的参数

传参基本数据类型

public static void main(String[] args) {
        int num = 0;
        func(num);
        System.out.println("num = " + num);
}
public static void func(int x) {
        x = 10;
        System.out.println("x = " + x);
} // 执行结果
        x = 10
        num = 0
在func方法中修改形参 x 的值, 不影响实参的 num 值

传参数组类型(引用类型)

public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        func(arr);
        System.out.println("arr[0] = " + arr[0]);
}
public static void func(int[] a) {
        a[0] = 10;
        System.out.println("a[0] = " + a[0]);
} // 执行结果
        a[0] = 10
        arr[0] = 10
func方法内部修改数组的内容, 方法外部的数组内容也发生改变.
因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的。

作为函数的返回值

//斐波那契数组
public static int[] fib(int n){
    if(n <= 0){
        return null;
    } int[] array = new int[n];
    array[0] = array[1] = 1;
    for(int i = 2; i < n; ++i){
        array[i] = array[i-1] + array[i-2];
    } 
    return array;
}
public static void main(String[] args) {
    int[] array = fib(10);
    for (int i = 0; i < array.length; i++) {
        System.out.println(array[i]);
    }
}

2.3 小结

所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大)

三、二维数组

3.1 概念

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组。可以理解成二维数组是一维数组的数组。

3.2 基本语法

数据类型[][] 数组名称 = new 数据类型 行数{ 初始化数据 };  行数不可省略,列数可以省略  

二维数组的用法和一维数组并没有明显差别

3.3 代码示例

public static void main(String[] args) {
    int[][] array = new int[2][3];
    array[0] = new int[] {1,2,3};
    array[1] = new int[] {4,5,6};
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[0].length; j++) {
            System.out.print(array[i][j]+" ");
        }
        System.out.println();
    }
    for (int[] num : array) {
        for (int x: num) {
            System.out.print(x+" ");
        }
    }
    System.out.println();
    System.out.println(Arrays.deepToString(array));
}

🌤️全篇总结

通过学习基本数据类型和引用数据类型的区别,我们能够更清晰地理解变量在内存中的存储方式,以及对数据的操作方式。数组作为一种重要的数据结构,在不同场景下具有不同的应用方式,包括保存数据、作为方法参数传递和作为函数返回值等。二维数组则是一种在一维数组基础上延伸出的数据结构,通过理解二维数组的概念和基本语法,我们可以更灵活地处理多维数据。

33dcadccda9a4327a9541c4fd95c09fd.png

目录
相关文章
|
10月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
579 3
|
12月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
10月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
851 8
|
11月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1587 12
|
11月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
11月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1617 1
|
12月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
377 1
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。